Merge PR #475: Gpio: Update to libnymea-gpio and add GPIO buttons, overall improvements

master
Jenkins nymea 2021-10-04 15:37:41 +02:00
commit 9b68d6693b
8 changed files with 832 additions and 401 deletions

2
debian/control vendored
View File

@ -6,6 +6,7 @@ Build-depends: libboblight-dev,
debhelper (>= 0.0.0),
libnymea-dev (>= 0.26~),
libnymea-mqtt-dev,
libnymea-gpio-dev,
libnymea-zigbee-dev,
libqt5serialport5-dev,
libqt5websockets5-dev,
@ -376,6 +377,7 @@ Package: nymea-plugin-gpio
Architecture: any
Depends: ${shlibs:Depends},
${misc:Depends},
libnymea-gpio,
nymea-plugins-translations,
Description: nymea.io plugin for gpio
The nymea daemon is a plugin based IoT (Internet of Things) server. The

View File

@ -2,7 +2,7 @@
This plugin allows to control GPIOs on different boards.
## Raspberry Pi 2/3
## Raspberry Pi
![Raspberry Pi GPIO](https://raw.githubusercontent.com/guh/nymea-plugins/master/gpio/docs/images/Raspberry-Pi-2-GPIO.png "Raspberry Pi GPIO")

View File

@ -1,6 +1,6 @@
include(../plugins.pri)
TARGET = $$qtLibraryTarget(nymea_integrationplugingpio)
PKGCONFIG += nymea-gpio
SOURCES += \
integrationplugingpio.cpp \

View File

@ -1,6 +1,6 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Copyright 2013 - 2020, nymea GmbH
* Copyright 2013 - 2021, nymea GmbH
* Contact: contact@nymea.io
*
* This file is part of nymea.
@ -35,122 +35,35 @@
IntegrationPluginGpio::IntegrationPluginGpio()
{
}
void IntegrationPluginGpio::setupThing(ThingSetupInfo *info)
void IntegrationPluginGpio::init()
{
Thing *thing = info->thing();
qCDebug(dcGpioController()) << "Setup" << thing->name() << thing->params();
// Raspberry pi
m_gpioParamTypeIds.insert(gpioOutputRpiThingClassId, gpioOutputRpiThingGpioParamTypeId);
m_gpioParamTypeIds.insert(gpioInputRpiThingClassId, gpioInputRpiThingGpioParamTypeId);
m_gpioParamTypeIds.insert(counterRpiThingClassId, counterRpiThingGpioParamTypeId);
m_gpioParamTypeIds.insert(gpioButtonRpiThingClassId, gpioButtonRpiThingGpioParamTypeId);
// Check if GPIOs are available on this platform
if (!Gpio::isAvailable()) {
qCWarning(dcGpioController()) << "There are ou GPIOs on this plattform";
//: Error setting up GPIO thing
return info->finish(Thing::ThingErrorHardwareNotAvailable, QT_TR_NOOP("No GPIOs found on this system."));
}
// Beagle bone black
m_gpioParamTypeIds.insert(gpioOutputBbbThingClassId, gpioOutputBbbThingGpioParamTypeId);
m_gpioParamTypeIds.insert(gpioInputBbbThingClassId, gpioInputBbbThingGpioParamTypeId);
m_gpioParamTypeIds.insert(counterBbbThingClassId, counterBbbThingGpioParamTypeId);
m_gpioParamTypeIds.insert(gpioButtonBbbThingClassId, gpioButtonBbbThingGpioParamTypeId);
// GPIO Switch
if (thing->thingClassId() == gpioOutputRpiThingClassId || thing->thingClassId() == gpioOutputBbbThingClassId) {
// Create and configure gpio
int gpioId = -1;
if (thing->thingClassId() == gpioOutputRpiThingClassId)
gpioId = thing->paramValue(gpioOutputRpiThingGpioParamTypeId).toInt();
// Raspberry pi
m_activeLowParamTypeIds.insert(gpioOutputRpiThingClassId, gpioOutputRpiThingActiveLowParamTypeId);
m_activeLowParamTypeIds.insert(gpioInputRpiThingClassId, gpioInputRpiThingActiveLowParamTypeId);
m_activeLowParamTypeIds.insert(counterRpiThingClassId, counterRpiThingActiveLowParamTypeId);
m_activeLowParamTypeIds.insert(gpioButtonRpiThingClassId, gpioButtonRpiThingActiveLowParamTypeId);
if (thing->thingClassId() == gpioOutputBbbThingClassId)
gpioId = thing->paramValue(gpioOutputBbbThingGpioParamTypeId).toInt();
// Beagle bone black
m_activeLowParamTypeIds.insert(gpioOutputBbbThingClassId, gpioOutputBbbThingActiveLowParamTypeId);
m_activeLowParamTypeIds.insert(gpioInputBbbThingClassId, gpioInputBbbThingActiveLowParamTypeId);
m_activeLowParamTypeIds.insert(counterBbbThingClassId, counterBbbThingActiveLowParamTypeId);
m_activeLowParamTypeIds.insert(gpioButtonBbbThingClassId, gpioButtonBbbThingActiveLowParamTypeId);
Gpio *gpio = new Gpio(gpioId, this);
if (!gpio->exportGpio()) {
qCWarning(dcGpioController()) << "Could not export gpio for thing" << thing->name();
//: Error setting up GPIO thing
return info->finish(Thing::ThingErrorHardwareFailure, QT_TR_NOOP("Exporting GPIO failed."));
}
if (!gpio->setDirection(Gpio::DirectionOutput)) {
qCWarning(dcGpioController()) << "Could not configure output gpio for thing" << thing->name();
//: Error setting up GPIO thing
return info->finish(Thing::ThingErrorHardwareFailure, QT_TR_NOOP("Configuring output GPIO failed."));
}
if (!gpio->setValue(Gpio::ValueLow)) {
qCWarning(dcGpioController()) << "Could not set gpio value for thing" << thing->name();
//: Error setting up GPIO thing
return info->finish(Thing::ThingErrorHardwareFailure, QT_TR_NOOP("Setting GPIO value failed."));
}
m_gpioDevices.insert(gpio, thing);
if (thing->thingClassId() == gpioOutputRpiThingClassId)
m_raspberryPiGpios.insert(gpio->gpioNumber(), gpio);
if (thing->thingClassId() == gpioOutputBbbThingClassId)
m_beagleboneBlackGpios.insert(gpio->gpioNumber(), gpio);
return info->finish(Thing::ThingErrorNoError);
}
if (thing->thingClassId() == gpioInputRpiThingClassId || thing->thingClassId() == gpioInputBbbThingClassId) {
int gpioId = -1;
if (thing->thingClassId() == gpioInputRpiThingClassId)
gpioId = thing->paramValue(gpioInputRpiThingGpioParamTypeId).toInt();
if (thing->thingClassId() == gpioInputBbbThingClassId)
gpioId = thing->paramValue(gpioInputBbbThingGpioParamTypeId).toInt();
GpioMonitor *monitor = new GpioMonitor(gpioId, this);
if (!monitor->enable()) {
qCWarning(dcGpioController()) << "Could not enable gpio monitor for thing" << thing->name();
//: Error setting up GPIO thing
return info->finish(Thing::ThingErrorHardwareFailure, QT_TR_NOOP("Enabling GPIO monitor failed."));
}
connect(monitor, &GpioMonitor::valueChanged, this, &IntegrationPluginGpio::onGpioValueChanged);
m_monitorDevices.insert(monitor, thing);
if (thing->thingClassId() == gpioInputRpiThingClassId)
m_raspberryPiGpioMoniors.insert(monitor->gpio()->gpioNumber(), monitor);
if (thing->thingClassId() == gpioInputBbbThingClassId)
m_beagleboneBlackGpioMoniors.insert(monitor->gpio()->gpioNumber(), monitor);
return info->finish(Thing::ThingErrorNoError);
}
if (thing->thingClassId() == counterRpiThingClassId || thing->thingClassId() == counterBbbThingClassId) {
int gpioId = -1;
if (thing->thingClassId() == counterRpiThingClassId)
gpioId = thing->paramValue(counterRpiThingGpioParamTypeId).toInt();
if (thing->thingClassId() == counterBbbThingClassId)
gpioId = thing->paramValue(counterBbbThingGpioParamTypeId).toInt();
GpioMonitor *monitor = new GpioMonitor(gpioId, this);
if (!monitor->enable()) {
qCWarning(dcGpioController()) << "Could not enable gpio monitor for thing" << thing->name();
//: Error setting up GPIO thing
return info->finish(Thing::ThingErrorHardwareFailure, QT_TR_NOOP("Enabling GPIO monitor failed."));
}
connect(monitor, &GpioMonitor::valueChanged, this, &IntegrationPluginGpio::onGpioValueChanged);
m_monitorDevices.insert(monitor, thing);
if (thing->thingClassId() == counterRpiThingClassId)
m_raspberryPiGpioMoniors.insert(monitor->gpio()->gpioNumber(), monitor);
if (thing->thingClassId() == counterBbbThingClassId)
m_beagleboneBlackGpioMoniors.insert(monitor->gpio()->gpioNumber(), monitor);
m_counterValues.insert(thing->id(), 0);
return info->finish(Thing::ThingErrorNoError);
}
return info->finish(Thing::ThingErrorNoError);
}
void IntegrationPluginGpio::discoverThings(ThingDiscoveryInfo *info)
@ -167,19 +80,11 @@ void IntegrationPluginGpio::discoverThings(ThingDiscoveryInfo *info)
// Check which board / gpio configuration
const ThingClass deviceClass = supportedThings().findById(deviceClassId);
if (deviceClass.vendorId() == raspberryPiVendorId) {
// Create the list of available gpios
QList<GpioDescriptor> gpioDescriptors = raspberryPiGpioDescriptors();
for (int i = 0; i < gpioDescriptors.count(); i++) {
const GpioDescriptor gpioDescriptor = gpioDescriptors.at(i);
// Offer only gpios which arn't in use already
if (m_raspberryPiGpios.keys().contains(gpioDescriptor.gpio()))
continue;
if (m_raspberryPiGpioMoniors.keys().contains(gpioDescriptor.gpio()))
continue;
QString description;
if (gpioDescriptor.description().isEmpty()) {
description = QString("Pin %1").arg(gpioDescriptor.pin());
@ -197,11 +102,20 @@ void IntegrationPluginGpio::discoverThings(ThingDiscoveryInfo *info)
parameters.append(Param(gpioInputRpiThingGpioParamTypeId, gpioDescriptor.gpio()));
parameters.append(Param(gpioInputRpiThingPinParamTypeId, gpioDescriptor.pin()));
parameters.append(Param(gpioInputRpiThingDescriptionParamTypeId, gpioDescriptor.description()));
} else if (deviceClass.id() == gpioButtonRpiThingClassId) {
parameters.append(Param(gpioButtonRpiThingGpioParamTypeId, gpioDescriptor.gpio()));
parameters.append(Param(gpioButtonRpiThingPinParamTypeId, gpioDescriptor.pin()));
parameters.append(Param(gpioButtonRpiThingDescriptionParamTypeId, gpioDescriptor.description()));
} else if (deviceClass.id() == counterRpiThingClassId) {
parameters.append(Param(counterRpiThingGpioParamTypeId, gpioDescriptor.gpio()));
parameters.append(Param(counterRpiThingPinParamTypeId, gpioDescriptor.pin()));
parameters.append(Param(counterRpiThingDescriptionParamTypeId, gpioDescriptor.description()));
}
descriptor.setParams(parameters);
// Set device id for reconfigure
foreach (Thing *existingThing, myThings()) {
if (existingThing->paramValue(gpioOutputRpiThingGpioParamTypeId).toInt() == gpioDescriptor.gpio()) {
if (existingThing->paramValue(m_gpioParamTypeIds.value(deviceClass.id())).toInt() == gpioDescriptor.gpio()) {
descriptor.setThingId(existingThing->id());
break;
}
@ -219,13 +133,6 @@ void IntegrationPluginGpio::discoverThings(ThingDiscoveryInfo *info)
for (int i = 0; i < gpioDescriptors.count(); i++) {
const GpioDescriptor gpioDescriptor = gpioDescriptors.at(i);
// Offer only gpios which arn't in use already
if (m_beagleboneBlackGpios.keys().contains(gpioDescriptor.gpio()))
continue;
if (m_beagleboneBlackGpioMoniors.keys().contains(gpioDescriptor.gpio()))
continue;
QString description;
if (gpioDescriptor.description().isEmpty()) {
description = QString("Pin %1").arg(gpioDescriptor.pin());
@ -243,9 +150,25 @@ void IntegrationPluginGpio::discoverThings(ThingDiscoveryInfo *info)
parameters.append(Param(gpioInputBbbThingGpioParamTypeId, gpioDescriptor.gpio()));
parameters.append(Param(gpioInputBbbThingPinParamTypeId, gpioDescriptor.pin()));
parameters.append(Param(gpioInputBbbThingDescriptionParamTypeId, gpioDescriptor.description()));
} else if (deviceClass.id() == gpioButtonBbbThingClassId) {
parameters.append(Param(gpioButtonBbbThingGpioParamTypeId, gpioDescriptor.gpio()));
parameters.append(Param(gpioButtonBbbThingPinParamTypeId, gpioDescriptor.pin()));
parameters.append(Param(gpioButtonBbbThingDescriptionParamTypeId, gpioDescriptor.description()));
} else if (deviceClass.id() == counterBbbThingClassId) {
parameters.append(Param(counterBbbThingGpioParamTypeId, gpioDescriptor.gpio()));
parameters.append(Param(counterBbbThingPinParamTypeId, gpioDescriptor.pin()));
parameters.append(Param(counterBbbThingDescriptionParamTypeId, gpioDescriptor.description()));
}
descriptor.setParams(parameters);
// Set device id for reconfigure
foreach (Thing *existingThing, myThings()) {
if (existingThing->paramValue(m_gpioParamTypeIds.value(deviceClass.id())).toInt() == gpioDescriptor.gpio()) {
descriptor.setThingId(existingThing->id());
break;
}
}
info->addThingDescriptor(descriptor);
}
@ -253,9 +176,258 @@ void IntegrationPluginGpio::discoverThings(ThingDiscoveryInfo *info)
}
}
void IntegrationPluginGpio::setupThing(ThingSetupInfo *info)
{
Thing *thing = info->thing();
qCDebug(dcGpioController()) << "Setup" << thing->name() << thing->params();
// Check if GPIOs are available on this platform
if (!Gpio::isAvailable()) {
qCWarning(dcGpioController()) << "There are ou GPIOs on this plattform";
//: Error setting up GPIO thing
return info->finish(Thing::ThingErrorHardwareNotAvailable, QT_TR_NOOP("No GPIOs found on this system."));
}
// GPIO Switch
if (thing->thingClassId() == gpioOutputRpiThingClassId || thing->thingClassId() == gpioOutputBbbThingClassId) {
// Create and configure gpio
Gpio *gpio = new Gpio(thing->paramValue(m_gpioParamTypeIds.value(thing->thingClassId())).toInt(), this);
if (!gpio->exportGpio()) {
qCWarning(dcGpioController()) << "Could not export gpio for thing" << thing->name();
gpio->deleteLater();
//: Error setting up GPIO thing
return info->finish(Thing::ThingErrorHardwareFailure, QT_TR_NOOP("Exporting GPIO failed."));
}
if (!gpio->setDirection(Gpio::DirectionOutput)) {
qCWarning(dcGpioController()) << "Could not configure output gpio for thing" << thing->name();
gpio->deleteLater();
//: Error setting up GPIO thing
return info->finish(Thing::ThingErrorHardwareFailure, QT_TR_NOOP("Configuring output GPIO failed."));
}
if (!gpio->setActiveLow(thing->paramValue(m_activeLowParamTypeIds.value(thing->thingClassId())).toBool())) {
qCWarning(dcGpioController()) << "Could not configure output gpio for thing" << thing->name();
gpio->deleteLater();
//: Error setting up GPIO thing
return info->finish(Thing::ThingErrorHardwareFailure, QT_TR_NOOP("Configuring GPIO active low failed."));
}
// Make sure the pin is initially low, they will be restored in the post setup to the cached state
if (!gpio->setValue(Gpio::ValueLow)) {
qCWarning(dcGpioController()) << "Could not set gpio initially low for thing" << thing->name();
gpio->deleteLater();
//: Error setting up GPIO thing
return info->finish(Thing::ThingErrorHardwareFailure, QT_TR_NOOP("Set GPIO low failed."));
}
m_gpioDevices.insert(gpio, thing);
if (thing->thingClassId() == gpioOutputRpiThingClassId)
m_raspberryPiGpios.insert(gpio->gpioNumber(), gpio);
if (thing->thingClassId() == gpioOutputBbbThingClassId)
m_beagleboneBlackGpios.insert(gpio->gpioNumber(), gpio);
return info->finish(Thing::ThingErrorNoError);
}
// Gpio input
if (thing->thingClassId() == gpioInputRpiThingClassId || thing->thingClassId() == gpioInputBbbThingClassId) {
GpioMonitor *monitor = new GpioMonitor(thing->paramValue(m_gpioParamTypeIds.value(thing->thingClassId())).toInt(), this);
monitor->setActiveLow(thing->paramValue(m_activeLowParamTypeIds.value(thing->thingClassId())).toBool());
if (!monitor->enable()) {
qCWarning(dcGpioController()) << "Could not enable gpio monitor for thing" << thing->name();
//: Error setting up GPIO thing
monitor->deleteLater();
return info->finish(Thing::ThingErrorHardwareFailure, QT_TR_NOOP("Enabling GPIO monitor failed."));
}
connect(monitor, &GpioMonitor::enabledChanged, thing, [thing](bool enabled){
if (thing->thingClassId() == gpioInputRpiThingClassId) {
thing->setStateValue(gpioInputRpiPowerStateTypeId, enabled);
} else if (thing->thingClassId() == gpioInputBbbThingClassId) {
thing->setStateValue(gpioInputBbbPowerStateTypeId, enabled);
}
});
m_monitorDevices.insert(monitor, thing);
if (thing->thingClassId() == gpioInputRpiThingClassId)
m_raspberryPiGpioMoniors.insert(thing->paramValue(m_gpioParamTypeIds.value(thing->thingClassId())).toInt(), monitor);
if (thing->thingClassId() == gpioInputBbbThingClassId)
m_beagleboneBlackGpioMoniors.insert(thing->paramValue(m_gpioParamTypeIds.value(thing->thingClassId())).toInt(), monitor);
return info->finish(Thing::ThingErrorNoError);
}
// Counter
if (thing->thingClassId() == counterRpiThingClassId || thing->thingClassId() == counterBbbThingClassId) {
GpioMonitor *monitor = new GpioMonitor(thing->paramValue(m_gpioParamTypeIds.value(thing->thingClassId())).toInt(), this);
monitor->setActiveLow(thing->paramValue(m_activeLowParamTypeIds.value(thing->thingClassId())).toBool());
if (!monitor->enable()) {
qCWarning(dcGpioController()) << "Could not enable gpio monitor for thing" << thing->name();
monitor->deleteLater();
//: Error setting up GPIO thing
return info->finish(Thing::ThingErrorHardwareFailure, QT_TR_NOOP("Enabling GPIO monitor failed."));
}
connect(monitor, &GpioMonitor::enabledChanged, thing, [this, thing](bool enabled){
if (thing->thingClassId() == counterRpiThingClassId || thing->thingClassId() == counterBbbThingClassId) {
if (enabled) {
m_counterValues[thing->id()] += 1;
}
}
});
m_monitorDevices.insert(monitor, thing);
if (thing->thingClassId() == counterRpiThingClassId)
m_raspberryPiGpioMoniors.insert(thing->paramValue(m_gpioParamTypeIds.value(thing->thingClassId())).toInt(), monitor);
if (thing->thingClassId() == counterBbbThingClassId)
m_beagleboneBlackGpioMoniors.insert(thing->paramValue(m_gpioParamTypeIds.value(thing->thingClassId())).toInt(), monitor);
m_counterValues.insert(thing->id(), 0);
return info->finish(Thing::ThingErrorNoError);
}
// Button
if (thing->thingClassId() == gpioButtonRpiThingClassId || thing->thingClassId() == gpioButtonBbbThingClassId) {
GpioButton *button = new GpioButton(thing->paramValue(m_gpioParamTypeIds.value(thing->thingClassId())).toInt(), this);
button->setActiveLow(thing->paramValue(m_activeLowParamTypeIds.value(thing->thingClassId())).toBool());
if (thing->thingClassId() == gpioButtonRpiThingClassId) {
button->setLongPressedTimeout(thing->setting(gpioButtonRpiSettingsLongPressedTimeoutParamTypeId).toUInt());
button->setRepeateLongPressed(thing->setting(gpioButtonRpiSettingsRepeateLongPressedParamTypeId).toBool());
} else if (thing->thingClassId() == gpioButtonBbbThingClassId) {
button->setLongPressedTimeout(thing->setting(gpioButtonBbbSettingsLongPressedTimeoutParamTypeId).toUInt());
button->setRepeateLongPressed(thing->setting(gpioButtonBbbSettingsRepeateLongPressedParamTypeId).toBool());
}
if (!button->enable()) {
qCWarning(dcGpioController()) << "Could not enable button" << button;
button->deleteLater();
return info->finish(Thing::ThingErrorHardwareFailure, QT_TR_NOOP("Enabling GPIO button failed."));
}
// Settings
connect(thing, &Thing::settingChanged, this, [button, thing](const ParamTypeId &paramTypeId, const QVariant &value){
qCDebug(dcGpioController()) << button << "settings changed" << paramTypeId.toString() << value;
if (thing->thingClassId() == gpioButtonRpiThingClassId) {
if (paramTypeId == gpioButtonRpiSettingsRepeateLongPressedParamTypeId) {
button->setRepeateLongPressed(value.toBool());
} else if (paramTypeId == gpioButtonRpiSettingsLongPressedTimeoutParamTypeId) {
button->setLongPressedTimeout(value.toUInt());
}
} else if (thing->thingClassId() == gpioButtonBbbThingClassId) {
if (paramTypeId == gpioButtonBbbSettingsRepeateLongPressedParamTypeId) {
button->setRepeateLongPressed(value.toBool());
} else if (paramTypeId == gpioButtonBbbSettingsLongPressedTimeoutParamTypeId) {
button->setLongPressedTimeout(value.toUInt());
}
}
});
// Button signals
connect(button, &GpioButton::clicked, this, [this, thing, button](){
qCDebug(dcGpioController()) << button << "clicked";
if (thing->thingClassId() == gpioButtonRpiThingClassId) {
emit emitEvent(Event(gpioButtonRpiPressedEventTypeId, thing->id()));
} else if (thing->thingClassId() == gpioButtonBbbThingClassId) {
emit emitEvent(Event(gpioButtonBbbPressedEventTypeId, thing->id()));
}
});
connect(button, &GpioButton::longPressed, this, [this, thing, button](){
qCDebug(dcGpioController()) << button << "long pressed";
if (thing->thingClassId() == gpioButtonRpiThingClassId) {
emit emitEvent(Event(gpioButtonRpiLongPressedEventTypeId, thing->id()));
} else if (thing->thingClassId() == gpioButtonBbbThingClassId) {
emit emitEvent(Event(gpioButtonBbbLongPressedEventTypeId, thing->id()));
}
});
m_buttonDevices.insert(button, thing);
if (thing->thingClassId() == gpioButtonRpiThingClassId)
m_raspberryPiGpioButtons.insert(thing->paramValue(m_gpioParamTypeIds.value(thing->thingClassId())).toInt(), button);
if (thing->thingClassId() == gpioButtonBbbThingClassId)
m_beagleboneBlackGpioButtons.insert(thing->paramValue(m_gpioParamTypeIds.value(thing->thingClassId())).toInt(), button);
}
return info->finish(Thing::ThingErrorNoError);
}
void IntegrationPluginGpio::postSetupThing(Thing *thing)
{
// Gpio output
if (thing->thingClassId() == gpioOutputRpiThingClassId || thing->thingClassId() == gpioOutputBbbThingClassId) {
Gpio *gpio = m_gpioDevices.key(thing);
if (!gpio)
return;
// Note: restore the pin value to the last cached value
if (thing->thingClassId() == gpioOutputRpiThingClassId) {
qCDebug(dcGpioController()) << "Post setup: restore previouse output state" << gpio << thing->stateValue(gpioOutputRpiPowerStateTypeId).toBool();
if (thing->stateValue(gpioOutputRpiPowerStateTypeId).toBool()) {
gpio->setValue(Gpio::ValueHigh);
} else {
gpio->setValue(Gpio::ValueLow);
}
}
if (thing->thingClassId() == gpioOutputBbbThingClassId) {
qCDebug(dcGpioController()) << "Post setup: restore previouse output state" << gpio << thing->stateValue(gpioOutputRpiPowerStateTypeId).toBool();
if (thing->stateValue(gpioOutputBbbPowerStateTypeId).toBool()) {
gpio->setValue(Gpio::ValueHigh);
} else {
gpio->setValue(Gpio::ValueLow);
}
}
}
// Gpio input
if (thing->thingClassId() == gpioInputRpiThingClassId || thing->thingClassId() == gpioInputBbbThingClassId) {
GpioMonitor *monitor = m_monitorDevices.key(thing);
if (!monitor)
return;
if (thing->thingClassId() == gpioInputRpiThingClassId) {
thing->setStateValue(gpioInputRpiPowerStateTypeId, monitor->value());
} else if (thing->thingClassId() == gpioInputBbbThingClassId) {
thing->setStateValue(gpioInputBbbPowerStateTypeId, monitor->value());
}
}
// Counter
if (thing->thingClassId() == counterRpiThingClassId || thing->thingClassId() == counterBbbThingClassId) {
if (!m_counterTimer) {
m_counterTimer = hardwareManager()->pluginTimerManager()->registerTimer(1);
connect(m_counterTimer, &PluginTimer::timeout, this, [this](){
foreach (Thing *thing, myThings()) {
if (thing->thingClassId() == counterRpiThingClassId) {
int counterValue = m_counterValues.value(thing->id());
thing->setStateValue(counterRpiCounterStateTypeId, counterValue);
m_counterValues[thing->id()] = 0;
}
if (thing->thingClassId() == counterBbbThingClassId) {
int counterValue = m_counterValues.value(thing->id());
thing->setStateValue(counterBbbCounterStateTypeId, counterValue);
}
}
});
}
}
}
void IntegrationPluginGpio::thingRemoved(Thing *thing)
{
if (m_gpioDevices.values().contains(thing)) {
const QList<Thing *> gpioThings = m_gpioDevices.values();
if (gpioThings.contains(thing)) {
Gpio *gpio = m_gpioDevices.key(thing);
if (!gpio)
return;
@ -271,7 +443,8 @@ void IntegrationPluginGpio::thingRemoved(Thing *thing)
delete gpio;
}
if (m_monitorDevices.values().contains(thing)) {
const QList<Thing *> monitorThings = m_monitorDevices.values();
if (monitorThings.contains(thing)) {
GpioMonitor *monitor = m_monitorDevices.key(thing);
if (!monitor)
return;
@ -279,14 +452,31 @@ void IntegrationPluginGpio::thingRemoved(Thing *thing)
m_monitorDevices.remove(monitor);
if (m_raspberryPiGpioMoniors.values().contains(monitor))
m_raspberryPiGpios.remove(monitor->gpio()->gpioNumber());
m_raspberryPiGpioMoniors.remove(thing->paramValue(m_gpioParamTypeIds.value(thing->thingClassId())).toInt());
if (m_beagleboneBlackGpioMoniors.values().contains(monitor))
m_beagleboneBlackGpioMoniors.remove(monitor->gpio()->gpioNumber());
m_beagleboneBlackGpioMoniors.remove(thing->paramValue(m_gpioParamTypeIds.value(thing->thingClassId())).toInt());
delete monitor;
}
const QList<Thing *> buttonThings = m_buttonDevices.values();
if (buttonThings.contains(thing)) {
GpioButton *button = m_buttonDevices.key(thing);
if (!button)
return;
m_buttonDevices.remove(button);
if (m_raspberryPiGpioButtons.values().contains(button))
m_raspberryPiGpioButtons.remove(thing->paramValue(m_gpioParamTypeIds.value(thing->thingClassId())).toInt());
if (m_beagleboneBlackGpioButtons.values().contains(button))
m_beagleboneBlackGpioButtons.remove(thing->paramValue(m_gpioParamTypeIds.value(thing->thingClassId())).toInt());
delete button;
}
if (m_counterValues.contains(thing->id())) {
m_counterValues.remove(thing->id());
}
@ -366,55 +556,6 @@ void IntegrationPluginGpio::executeAction(ThingActionInfo *info)
info->finish(Thing::ThingErrorNoError);
}
void IntegrationPluginGpio::postSetupThing(Thing *thing)
{
if (thing->thingClassId() == gpioOutputRpiThingClassId || thing->thingClassId() == gpioOutputBbbThingClassId) {
Gpio *gpio = m_gpioDevices.key(thing);
if (!gpio)
return;
gpio->setValue(Gpio::ValueLow);
if (thing->thingClassId() == gpioOutputRpiThingClassId) {
thing->setStateValue(gpioOutputRpiPowerStateTypeId, false);
}
if (thing->thingClassId() == gpioOutputBbbThingClassId) {
thing->setStateValue(gpioOutputBbbPowerStateTypeId, false);
}
}
if (thing->thingClassId() == gpioInputRpiThingClassId || thing->thingClassId() == gpioInputBbbThingClassId) {
GpioMonitor *monitor = m_monitorDevices.key(thing);
if (!monitor)
return;
if (thing->thingClassId() == gpioInputRpiThingClassId) {
thing->setStateValue(gpioInputRpiPowerStateTypeId, monitor->value());
} else if (thing->thingClassId() == gpioInputBbbThingClassId) {
thing->setStateValue(gpioInputBbbPowerStateTypeId, monitor->value());
}
}
if (thing->thingClassId() == counterRpiThingClassId || thing->thingClassId() == counterBbbThingClassId) {
if (!m_counterTimer) {
m_counterTimer = hardwareManager()->pluginTimerManager()->registerTimer(1);
connect(m_counterTimer, &PluginTimer::timeout, this, [this] (){
foreach (Thing *thing, myThings()) {
if (thing->thingClassId() == counterRpiThingClassId) {
int counterValue = m_counterValues.value(thing->id());
thing->setStateValue(counterRpiCounterStateTypeId, counterValue);
m_counterValues[thing->id()] = 0;
}
if (thing->thingClassId() == counterBbbThingClassId) {
int counterValue = m_counterValues.value(thing->id());
thing->setStateValue(counterBbbCounterStateTypeId, counterValue);
}
}
});
}
}
}
QList<GpioDescriptor> IntegrationPluginGpio::raspberryPiGpioDescriptors()
{
// Note: http://www.raspberrypi-spy.co.uk/wp-content/uploads/2012/06/Raspberry-Pi-GPIO-Layout-Model-B-Plus-rotated-2700x900.png
@ -521,22 +662,3 @@ QList<GpioDescriptor> IntegrationPluginGpio::beagleboneBlackGpioDescriptors()
gpioDescriptors << GpioDescriptor(89, 30, "P8 - LCD_AC_BIAS_E");
return gpioDescriptors;
}
void IntegrationPluginGpio::onGpioValueChanged(const bool &value)
{
GpioMonitor *monitor = static_cast<GpioMonitor *>(sender());
Thing *thing = m_monitorDevices.value(monitor);
if (!thing)
return;
if (thing->thingClassId() == gpioInputRpiThingClassId) {
thing->setStateValue(gpioInputRpiPowerStateTypeId, value);
} else if (thing->thingClassId() == gpioInputBbbThingClassId) {
thing->setStateValue(gpioInputBbbPowerStateTypeId, value);
} else if (thing->thingClassId() == counterRpiThingClassId || thing->thingClassId() == counterBbbThingClassId) {
if (value) {
m_counterValues[thing->id()] += 1;
}
}
}

View File

@ -1,6 +1,6 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Copyright 2013 - 2020, nymea GmbH
* Copyright 2013 - 2021, nymea GmbH
* Contact: contact@nymea.io
*
* This file is part of nymea.
@ -31,14 +31,14 @@
#ifndef INTEGRATIONPLUGINGPIO_H
#define INTEGRATIONPLUGINGPIO_H
#include "hardware/gpio.h"
#include "hardware/gpiomonitor.h"
#include "gpiodescriptor.h"
#include "hardware/gpiomonitor.h"
#include "integrations/integrationplugin.h"
#include "plugintimer.h"
#include "gpiodescriptor.h"
#include <QTimer>
// libnymea-gpio
#include "gpio.h"
#include "gpiomonitor.h"
#include "gpiobutton.h"
class IntegrationPluginGpio : public IntegrationPlugin
{
@ -50,30 +50,35 @@ class IntegrationPluginGpio : public IntegrationPlugin
public:
explicit IntegrationPluginGpio();
void setupThing(ThingSetupInfo *info) override;
void init() override;
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;
void postSetupThing(Thing *thing) override;
private:
QHash<ThingClassId, ParamTypeId> m_gpioParamTypeIds;
QHash<ThingClassId, ParamTypeId> m_activeLowParamTypeIds;
QHash<Gpio *, Thing *> m_gpioDevices;
QHash<GpioMonitor *, Thing *> m_monitorDevices;
QHash<GpioButton *, Thing *> m_buttonDevices;
QHash<int, Gpio *> m_raspberryPiGpios;
QHash<int, GpioMonitor *> m_raspberryPiGpioMoniors;
QHash<int, GpioButton *> m_raspberryPiGpioButtons;
QHash<int, Gpio *> m_beagleboneBlackGpios;
QHash<int, GpioMonitor *> m_beagleboneBlackGpioMoniors;
QHash<int, GpioButton *> m_beagleboneBlackGpioButtons;
QList<GpioDescriptor> raspberryPiGpioDescriptors();
QList<GpioDescriptor> beagleboneBlackGpioDescriptors();
PluginTimer *m_counterTimer = nullptr;
QHash<ThingId, int> m_counterValues;
private slots:
void onGpioValueChanged(const bool &value);
};
#endif // INTEGRATIONPLUGINGPIO_H

View File

@ -2,19 +2,9 @@
"displayName": "Gpio Controller",
"name": "GpioController",
"id": "127ead55-996a-44ac-ba82-fc3c634e018a",
"paramTypes": [
{
"id": "bfb31f88-b481-49e1-9a0a-41b156b64efe",
"name": "longPressTime",
"displayName": "Long press time",
"type": "int",
"unit": "Seconds",
"defaultValue": 2
}
],
"vendors": [
{
"displayName": "Raspberry Pi 2/3",
"displayName": "Raspberry Pi",
"name": "raspberryPi",
"id": "f0d00b66-bbd8-4a07-8591-ea48a61b229e",
"thingClasses": [
@ -39,6 +29,13 @@
"type": "int",
"defaultValue": -1
},
{
"id": "4dfddecc-d41c-4b31-bf4a-04297097bd5c",
"name": "activeLow",
"displayName": "Active low",
"type": "bool",
"defaultValue": false
},
{
"id": "504798eb-1faa-4703-a57a-2778e4bf9a67",
"name": "description",
@ -57,7 +54,8 @@
"writable": true,
"displayNameEvent": "Power changed",
"displayNameAction": "Set power",
"ioType": "digitalOutput"
"ioType": "digitalOutput",
"cached": true
}
]
},
@ -81,6 +79,13 @@
"type": "int",
"defaultValue": -1
},
{
"id": "d877b7cd-0440-4f49-a6d6-5c679d9f3cc3",
"name": "activeLow",
"displayName": "Active low",
"type": "bool",
"defaultValue": false
},
{
"id": "720bb37e-56e6-419e-878e-8c80aaf7ce32",
"name": "description",
@ -101,6 +106,72 @@
}
]
},
{
"id": "1abd4dad-0757-4160-8df1-75c45bd61e6e",
"displayName": "GPIO Button",
"name": "gpioButtonRpi",
"createMethods": [ "discovery" ],
"interfaces": [ "longpressbutton" ],
"paramTypes": [
{
"id": "234538be-710d-4a0b-9cb9-ac57b47ab14d",
"name": "gpio",
"displayName": "GPIO",
"type": "int",
"defaultValue": -1
},
{
"id": "90735212-d518-43c0-8fe9-aaa5362a512d",
"name": "pin",
"displayName": "Pin number",
"type": "int",
"defaultValue": -1
},
{
"id": "ad7b1641-bc7a-46d3-b029-d2f7628eb790",
"name": "activeLow",
"displayName": "Active low",
"type": "bool",
"defaultValue": false
},
{
"id": "5ea2fbf9-fd20-4bd7-b0ed-08f72f18157f",
"name": "description",
"displayName": "Description",
"type": "QString",
"defaultValue": "-"
}
],
"settingsTypes": [
{
"id": "d826f02e-7528-4ad5-ac71-f49df988114d",
"name": "repeateLongPressed",
"displayName": "Repeat long pressed",
"type": "bool",
"defaultValue": false
},
{
"id": "46a25783-3e96-4489-a3f0-15236d938f17",
"name": "longPressedTimeout",
"displayName": "Long pressed timeout [ms]",
"type": "uint",
"minValue": 200,
"defaultValue": 250
}
],
"eventTypes": [
{
"id": "28330833-158c-4f99-9f6e-407ee8f29a4e",
"name": "pressed",
"displayName": "Pressed"
},
{
"id": "5ad39e3d-b155-4091-a7ef-d843c00d75aa",
"name": "longPressed",
"displayName": "Long pressed"
}
]
},
{
"id": "75b13371-a064-47a7-bb82-e9d93a5b5027",
"displayName": "Counter",
@ -122,6 +193,13 @@
"type": "int",
"defaultValue": -1
},
{
"id": "2b57c0ed-a7e5-4198-a82a-75c2cf3ca710",
"name": "activeLow",
"displayName": "Active low",
"type": "bool",
"defaultValue": false
},
{
"id": "f7b82516-ed2c-4d73-86fa-957b8b6737e4",
"name": "description",
@ -170,6 +248,13 @@
"type": "int",
"defaultValue": -1
},
{
"id": "c7114a64-b9de-4d51-a58d-9d5c604a6f32",
"name": "activeLow",
"displayName": "Active low",
"type": "bool",
"defaultValue": false
},
{
"id": "760aa4ed-d933-4188-aec8-16285d763aa5",
"name": "description",
@ -188,7 +273,8 @@
"writable": true,
"displayNameEvent": "Power changed",
"displayNameAction": "Set power",
"ioType": "digitalOutput"
"ioType": "digitalOutput",
"cached": true
}
]
},
@ -212,6 +298,13 @@
"type": "int",
"defaultValue": -1
},
{
"id": "7b4b7c74-ed0d-4add-8e10-1a356a76c0e7",
"name": "activeLow",
"displayName": "Active low",
"type": "bool",
"defaultValue": false
},
{
"id": "da746cde-2380-4ee5-bf2c-017249fcdeef",
"name": "description",
@ -232,6 +325,72 @@
}
]
},
{
"id": "4a4b79b9-7e43-4fd7-840f-31108bef0ee2",
"displayName": "GPIO Button",
"name": "gpioButtonBbb",
"createMethods": [ "discovery" ],
"interfaces": [ "longpressbutton" ],
"paramTypes": [
{
"id": "7a5ad4d6-2aa3-496f-9fb9-ae46eb8b4376",
"name": "gpio",
"displayName": "GPIO",
"type": "int",
"defaultValue": -1
},
{
"id": "4c24d8f5-8b87-457f-a64b-aa52f7f81dc0",
"name": "pin",
"displayName": "Pin number",
"type": "int",
"defaultValue": -1
},
{
"id": "bd3fefb3-1204-41ed-8452-1b9d11f265a0",
"name": "activeLow",
"displayName": "Active low",
"type": "bool",
"defaultValue": false
},
{
"id": "fc7850b7-3b9c-4df9-8153-40f3582213ea",
"name": "description",
"displayName": "Description",
"type": "QString",
"defaultValue": "-"
}
],
"settingsTypes": [
{
"id": "292bf500-b7ab-428b-908c-2fedae295ee2",
"name": "repeateLongPressed",
"displayName": "Repeat long pressed",
"type": "bool",
"defaultValue": false
},
{
"id": "007be75a-bfcd-4039-b8ab-9bce25421894",
"name": "longPressedTimeout",
"displayName": "Long pressed timeout [ms]",
"type": "uint",
"minValue": 200,
"defaultValue": 250
}
],
"eventTypes": [
{
"id": "d02b16a8-a242-41f5-b4e0-d3209849f25e",
"name": "pressed",
"displayName": "Pressed"
},
{
"id": "11ffeeed-23fe-4cd7-bf15-c95c7250448c",
"name": "longPressed",
"displayName": "Long pressed"
}
]
},
{
"id": "3e311ef1-60c4-4b0e-a2fb-186bff9bd792",
"displayName": "Counter",
@ -253,6 +412,13 @@
"type": "int",
"defaultValue": -1
},
{
"id": "8745fbd1-d904-4551-93f4-0f923fcee9b5",
"name": "activeLow",
"displayName": "Active low",
"type": "bool",
"defaultValue": false
},
{
"id": "cba6a527-9f5c-4c05-8602-60e0c920fd26",
"name": "description",

View File

@ -4,20 +4,14 @@
<context>
<name>GpioController</name>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="147"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="211"/>
<source>Gpio Controller</source>
<extracomment>The name of the plugin GpioController ({127ead55-996a-44ac-ba82-fc3c634e018a})</extracomment>
<translation>GPIO-Controller</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="219"/>
<source>Raspberry Pi 2/3</source>
<extracomment>The name of the vendor ({f0d00b66-bbd8-4a07-8591-ea48a61b229e})</extracomment>
<translation>Raspberry Pi 2/3</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="141"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="144"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="205"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="208"/>
<source>GPIO Output</source>
<extracomment>The name of the ThingClass ({75d54a59-f9b0-4bc4-a86c-6b1fc47e0663})
----------
@ -25,12 +19,12 @@ The name of the ThingClass ({3885c520-e202-4435-88f6-3c35c362b2e6})</extracommen
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="75"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="78"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="81"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="84"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="87"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="90"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="121"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="124"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="127"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="130"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="133"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="136"/>
<source>Counter</source>
<extracomment>The name of the ParamType (ThingClass: counterBbb, EventType: counter, ID: {fb5181d0-644b-4ab7-afa0-b7ddc8951526})
----------
@ -46,8 +40,35 @@ The name of the ThingClass ({75b13371-a064-47a7-bb82-e9d93a5b5027})</extracommen
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="93"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="96"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="94"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="97"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="100"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="103"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="106"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="109"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="112"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="115"/>
<source>Active low</source>
<extracomment>The name of the ParamType (ThingClass: counterBbb, Type: thing, ID: {8745fbd1-d904-4551-93f4-0f923fcee9b5})
----------
The name of the ParamType (ThingClass: gpioButtonBbb, Type: thing, ID: {bd3fefb3-1204-41ed-8452-1b9d11f265a0})
----------
The name of the ParamType (ThingClass: gpioInputBbb, Type: thing, ID: {7b4b7c74-ed0d-4add-8e10-1a356a76c0e7})
----------
The name of the ParamType (ThingClass: gpioOutputBbb, Type: thing, ID: {c7114a64-b9de-4d51-a58d-9d5c604a6f32})
----------
The name of the ParamType (ThingClass: counterRpi, Type: thing, ID: {2b57c0ed-a7e5-4198-a82a-75c2cf3ca710})
----------
The name of the ParamType (ThingClass: gpioButtonRpi, Type: thing, ID: {ad7b1641-bc7a-46d3-b029-d2f7628eb790})
----------
The name of the ParamType (ThingClass: gpioInputRpi, Type: thing, ID: {d877b7cd-0440-4f49-a6d6-5c679d9f3cc3})
----------
The name of the ParamType (ThingClass: gpioOutputRpi, Type: thing, ID: {4dfddecc-d41c-4b31-bf4a-04297097bd5c})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="139"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="142"/>
<source>Counter changed</source>
<extracomment>The name of the EventType ({fb5181d0-644b-4ab7-afa0-b7ddc8951526}) of ThingClass counterBbb
----------
@ -55,101 +76,122 @@ The name of the EventType ({891bc1ce-2f9b-4518-aed9-90e78bc2409e}) of ThingClass
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="117"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="120"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="123"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="126"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="129"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="132"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="169"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="172"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="175"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="178"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="181"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="184"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="187"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="190"/>
<source>GPIO</source>
<extracomment>The name of the ParamType (ThingClass: counterBbb, Type: thing, ID: {68bc0f3b-18c3-4a60-a2df-85bc0605caec})
----------
The name of the ParamType (ThingClass: gpioButtonBbb, Type: thing, ID: {7a5ad4d6-2aa3-496f-9fb9-ae46eb8b4376})
----------
The name of the ParamType (ThingClass: gpioInputBbb, Type: thing, ID: {20773255-4576-4c8e-8c8b-051902919761})
----------
The name of the ParamType (ThingClass: gpioOutputBbb, Type: thing, ID: {62a9596d-fc7d-4554-9f45-9803635da619})
----------
The name of the ParamType (ThingClass: counterRpi, Type: thing, ID: {a6feb722-1dc9-4262-96b0-96489507508f})
----------
The name of the ParamType (ThingClass: gpioButtonRpi, Type: thing, ID: {234538be-710d-4a0b-9cb9-ac57b47ab14d})
----------
The name of the ParamType (ThingClass: gpioInputRpi, Type: thing, ID: {b45ca4a8-c67a-411c-957c-0e78e1f12c0b})
----------
The name of the ParamType (ThingClass: gpioOutputRpi, Type: thing, ID: {9eda783f-6d9f-4d39-986d-d2cbfff5a7dd})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="150"/>
<source>Long press time</source>
<extracomment>The name of the ParamType (ThingClass: gpioController, Type: plugin, ID: {bfb31f88-b481-49e1-9a0a-41b156b64efe})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="153"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="156"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="214"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="217"/>
<source>Long pressed</source>
<extracomment>The name of the EventType ({6b439e89-2cac-482a-b012-452c7c665acb}) of ThingClass gpioInputBbb
<extracomment>The name of the EventType ({11ffeeed-23fe-4cd7-bf15-c95c7250448c}) of ThingClass gpioButtonBbb
----------
The name of the EventType ({0df945d3-38df-4560-b42a-12b05545904d}) of ThingClass gpioInputRpi</extracomment>
The name of the EventType ({5ad39e3d-b155-4091-a7ef-d843c00d75aa}) of ThingClass gpioButtonRpi</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="159"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="162"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="165"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="168"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="171"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="174"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="220"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="223"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="226"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="229"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="232"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="235"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="238"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="241"/>
<source>Pin number</source>
<extracomment>The name of the ParamType (ThingClass: counterBbb, Type: thing, ID: {f9da4a22-b010-4823-9b1c-d1f422c3ad2b})
----------
The name of the ParamType (ThingClass: gpioButtonBbb, Type: thing, ID: {4c24d8f5-8b87-457f-a64b-aa52f7f81dc0})
----------
The name of the ParamType (ThingClass: gpioInputBbb, Type: thing, ID: {f383bf1d-3ac0-4808-a82c-18748baf085d})
----------
The name of the ParamType (ThingClass: gpioOutputBbb, Type: thing, ID: {14f65be0-ee84-42e4-8fcb-d98a9926a247})
----------
The name of the ParamType (ThingClass: counterRpi, Type: thing, ID: {b2c194bd-1aef-4851-a290-dd45269cc592})
----------
The name of the ParamType (ThingClass: gpioButtonRpi, Type: thing, ID: {90735212-d518-43c0-8fe9-aaa5362a512d})
----------
The name of the ParamType (ThingClass: gpioInputRpi, Type: thing, ID: {efd3df4a-d2b6-44f3-9095-7bba07891735})
----------
The name of the ParamType (ThingClass: gpioOutputRpi, Type: thing, ID: {2204d278-7bc7-407f-ac82-ce3ae1d5779c})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="99"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="102"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="105"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="108"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="111"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="114"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="145"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="148"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="151"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="154"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="157"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="160"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="163"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="166"/>
<source>Description</source>
<extracomment>The name of the ParamType (ThingClass: counterBbb, Type: thing, ID: {cba6a527-9f5c-4c05-8602-60e0c920fd26})
----------
The name of the ParamType (ThingClass: gpioButtonBbb, Type: thing, ID: {fc7850b7-3b9c-4df9-8153-40f3582213ea})
----------
The name of the ParamType (ThingClass: gpioInputBbb, Type: thing, ID: {da746cde-2380-4ee5-bf2c-017249fcdeef})
----------
The name of the ParamType (ThingClass: gpioOutputBbb, Type: thing, ID: {760aa4ed-d933-4188-aec8-16285d763aa5})
----------
The name of the ParamType (ThingClass: counterRpi, Type: thing, ID: {f7b82516-ed2c-4d73-86fa-957b8b6737e4})
----------
The name of the ParamType (ThingClass: gpioButtonRpi, Type: thing, ID: {5ea2fbf9-fd20-4bd7-b0ed-08f72f18157f})
----------
The name of the ParamType (ThingClass: gpioInputRpi, Type: thing, ID: {720bb37e-56e6-419e-878e-8c80aaf7ce32})
----------
The name of the ParamType (ThingClass: gpioOutputRpi, Type: thing, ID: {504798eb-1faa-4703-a57a-2778e4bf9a67})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="195"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="198"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="268"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="271"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="274"/>
<source>Power changed</source>
<extracomment>The name of the EventType ({82b567c6-a33c-484e-b5e7-e04795498d00}) of ThingClass gpioOutputBbb
<extracomment>The name of the EventType ({22440876-417a-4d57-8e01-efe26ef9f235}) of ThingClass gpioInputBbb
----------
The name of the EventType ({82b567c6-a33c-484e-b5e7-e04795498d00}) of ThingClass gpioOutputBbb
----------
The name of the EventType ({06843766-358e-44b0-8d52-2b46ef98459a}) of ThingClass gpioOutputRpi</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="177"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="180"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="183"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="186"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="189"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="192"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="244"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="247"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="250"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="253"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="256"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="259"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="262"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="265"/>
<source>Power</source>
<extracomment>The name of the ParamType (ThingClass: gpioOutputBbb, ActionType: power, ID: {82b567c6-a33c-484e-b5e7-e04795498d00})
<extracomment>The name of the ParamType (ThingClass: gpioInputBbb, EventType: power, ID: {22440876-417a-4d57-8e01-efe26ef9f235})
----------
The name of the StateType ({22440876-417a-4d57-8e01-efe26ef9f235}) of ThingClass gpioInputBbb
----------
The name of the ParamType (ThingClass: gpioOutputBbb, ActionType: power, ID: {82b567c6-a33c-484e-b5e7-e04795498d00})
----------
The name of the ParamType (ThingClass: gpioOutputBbb, EventType: power, ID: {82b567c6-a33c-484e-b5e7-e04795498d00})
----------
@ -163,8 +205,17 @@ The name of the StateType ({06843766-358e-44b0-8d52-2b46ef98459a}) of ThingClass
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="135"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="138"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="193"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="196"/>
<source>GPIO Button</source>
<extracomment>The name of the ThingClass ({4a4b79b9-7e43-4fd7-840f-31108bef0ee2})
----------
The name of the ThingClass ({1abd4dad-0757-4160-8df1-75c45bd61e6e})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="199"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="202"/>
<source>GPIO Input</source>
<extracomment>The name of the ThingClass ({ffd2aa29-55cc-4824-ba95-c311784f7824})
----------
@ -172,8 +223,29 @@ The name of the ThingClass ({6aff228b-0410-4ef9-9593-51e8639aacea})</extracommen
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="222"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="225"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="277"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="280"/>
<source>Powered</source>
<extracomment>The name of the ParamType (ThingClass: gpioInputRpi, EventType: power, ID: {57f1b7cc-26c8-434b-ba04-d3077dc886c8})
----------
The name of the StateType ({57f1b7cc-26c8-434b-ba04-d3077dc886c8}) of ThingClass gpioInputRpi</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="283"/>
<source>Powered changed</source>
<extracomment>The name of the EventType ({57f1b7cc-26c8-434b-ba04-d3077dc886c8}) of ThingClass gpioInputRpi</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="292"/>
<source>Raspberry Pi</source>
<extracomment>The name of the vendor ({f0d00b66-bbd8-4a07-8591-ea48a61b229e})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="295"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="298"/>
<source>Set power</source>
<extracomment>The name of the ActionType ({82b567c6-a33c-484e-b5e7-e04795498d00}) of ThingClass gpioOutputBbb
----------
@ -181,31 +253,16 @@ The name of the ActionType ({06843766-358e-44b0-8d52-2b46ef98459a}) of ThingClas
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="213"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="216"/>
<source>Pressed changed</source>
<extracomment>The name of the EventType ({22440876-417a-4d57-8e01-efe26ef9f235}) of ThingClass gpioInputBbb
----------
The name of the EventType ({57f1b7cc-26c8-434b-ba04-d3077dc886c8}) of ThingClass gpioInputRpi</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="201"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="204"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="207"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="210"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="286"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="289"/>
<source>Pressed</source>
<extracomment>The name of the ParamType (ThingClass: gpioInputBbb, EventType: pressed, ID: {22440876-417a-4d57-8e01-efe26ef9f235})
<extracomment>The name of the EventType ({d02b16a8-a242-41f5-b4e0-d3209849f25e}) of ThingClass gpioButtonBbb
----------
The name of the StateType ({22440876-417a-4d57-8e01-efe26ef9f235}) of ThingClass gpioInputBbb
----------
The name of the ParamType (ThingClass: gpioInputRpi, EventType: pressed, ID: {57f1b7cc-26c8-434b-ba04-d3077dc886c8})
----------
The name of the StateType ({57f1b7cc-26c8-434b-ba04-d3077dc886c8}) of ThingClass gpioInputRpi</extracomment>
The name of the EventType ({28330833-158c-4f99-9f6e-407ee8f29a4e}) of ThingClass gpioButtonRpi</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="72"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="118"/>
<source>Beaglebone Black</source>
<extracomment>The name of the vendor ({7835d14b-b455-49bd-9f31-72c6e8c3033d})</extracomment>
<translation type="unfinished"></translation>
@ -214,27 +271,33 @@ The name of the StateType ({57f1b7cc-26c8-434b-ba04-d3077dc886c8}) of ThingClass
<context>
<name>IntegrationPluginGpio</name>
<message>
<location filename="../integrationplugingpio.cpp" line="49"/>
<location filename="../integrationplugingpio.cpp" line="76"/>
<source>No GPIOs found on this system.</source>
<extracomment>Error setting up GPIO thing</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../integrationplugingpio.cpp" line="67"/>
<location filename="../integrationplugingpio.cpp" line="89"/>
<source>Exporting GPIO failed.</source>
<extracomment>Error setting up GPIO thing</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../integrationplugingpio.cpp" line="73"/>
<location filename="../integrationplugingpio.cpp" line="96"/>
<source>Configuring output GPIO failed.</source>
<extracomment>Error setting up GPIO thing</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../integrationplugingpio.cpp" line="79"/>
<location filename="../integrationplugingpio.cpp" line="342"/>
<location filename="../integrationplugingpio.cpp" line="362"/>
<location filename="../integrationplugingpio.cpp" line="103"/>
<source>Configuring GPIO active low failed.</source>
<extracomment>Error setting up GPIO thing</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../integrationplugingpio.cpp" line="110"/>
<location filename="../integrationplugingpio.cpp" line="431"/>
<location filename="../integrationplugingpio.cpp" line="451"/>
<source>Setting GPIO value failed.</source>
<extracomment>Error setting up GPIO thing
----------
@ -242,20 +305,25 @@ Error executing GPIO action</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../integrationplugingpio.cpp" line="107"/>
<location filename="../integrationplugingpio.cpp" line="137"/>
<location filename="../integrationplugingpio.cpp" line="130"/>
<location filename="../integrationplugingpio.cpp" line="162"/>
<source>Enabling GPIO monitor failed.</source>
<extracomment>Error setting up GPIO thing</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../integrationplugingpio.cpp" line="164"/>
<location filename="../integrationplugingpio.cpp" line="191"/>
<source>Enabling GPIO button failed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../integrationplugingpio.cpp" line="233"/>
<source>No GPIOs available on this system.</source>
<extracomment>Error discovering GPIO devices</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../integrationplugingpio.cpp" line="326"/>
<location filename="../integrationplugingpio.cpp" line="415"/>
<source>GPIO not found</source>
<extracomment>Error executing GPIO action</extracomment>
<translation type="unfinished"></translation>

View File

@ -4,20 +4,14 @@
<context>
<name>GpioController</name>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="147"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="211"/>
<source>Gpio Controller</source>
<extracomment>The name of the plugin GpioController ({127ead55-996a-44ac-ba82-fc3c634e018a})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="219"/>
<source>Raspberry Pi 2/3</source>
<extracomment>The name of the vendor ({f0d00b66-bbd8-4a07-8591-ea48a61b229e})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="141"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="144"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="205"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="208"/>
<source>GPIO Output</source>
<extracomment>The name of the ThingClass ({75d54a59-f9b0-4bc4-a86c-6b1fc47e0663})
----------
@ -25,12 +19,12 @@ The name of the ThingClass ({3885c520-e202-4435-88f6-3c35c362b2e6})</extracommen
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="75"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="78"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="81"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="84"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="87"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="90"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="121"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="124"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="127"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="130"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="133"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="136"/>
<source>Counter</source>
<extracomment>The name of the ParamType (ThingClass: counterBbb, EventType: counter, ID: {fb5181d0-644b-4ab7-afa0-b7ddc8951526})
----------
@ -46,8 +40,35 @@ The name of the ThingClass ({75b13371-a064-47a7-bb82-e9d93a5b5027})</extracommen
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="93"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="96"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="94"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="97"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="100"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="103"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="106"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="109"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="112"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="115"/>
<source>Active low</source>
<extracomment>The name of the ParamType (ThingClass: counterBbb, Type: thing, ID: {8745fbd1-d904-4551-93f4-0f923fcee9b5})
----------
The name of the ParamType (ThingClass: gpioButtonBbb, Type: thing, ID: {bd3fefb3-1204-41ed-8452-1b9d11f265a0})
----------
The name of the ParamType (ThingClass: gpioInputBbb, Type: thing, ID: {7b4b7c74-ed0d-4add-8e10-1a356a76c0e7})
----------
The name of the ParamType (ThingClass: gpioOutputBbb, Type: thing, ID: {c7114a64-b9de-4d51-a58d-9d5c604a6f32})
----------
The name of the ParamType (ThingClass: counterRpi, Type: thing, ID: {2b57c0ed-a7e5-4198-a82a-75c2cf3ca710})
----------
The name of the ParamType (ThingClass: gpioButtonRpi, Type: thing, ID: {ad7b1641-bc7a-46d3-b029-d2f7628eb790})
----------
The name of the ParamType (ThingClass: gpioInputRpi, Type: thing, ID: {d877b7cd-0440-4f49-a6d6-5c679d9f3cc3})
----------
The name of the ParamType (ThingClass: gpioOutputRpi, Type: thing, ID: {4dfddecc-d41c-4b31-bf4a-04297097bd5c})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="139"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="142"/>
<source>Counter changed</source>
<extracomment>The name of the EventType ({fb5181d0-644b-4ab7-afa0-b7ddc8951526}) of ThingClass counterBbb
----------
@ -55,101 +76,122 @@ The name of the EventType ({891bc1ce-2f9b-4518-aed9-90e78bc2409e}) of ThingClass
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="117"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="120"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="123"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="126"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="129"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="132"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="169"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="172"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="175"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="178"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="181"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="184"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="187"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="190"/>
<source>GPIO</source>
<extracomment>The name of the ParamType (ThingClass: counterBbb, Type: thing, ID: {68bc0f3b-18c3-4a60-a2df-85bc0605caec})
----------
The name of the ParamType (ThingClass: gpioButtonBbb, Type: thing, ID: {7a5ad4d6-2aa3-496f-9fb9-ae46eb8b4376})
----------
The name of the ParamType (ThingClass: gpioInputBbb, Type: thing, ID: {20773255-4576-4c8e-8c8b-051902919761})
----------
The name of the ParamType (ThingClass: gpioOutputBbb, Type: thing, ID: {62a9596d-fc7d-4554-9f45-9803635da619})
----------
The name of the ParamType (ThingClass: counterRpi, Type: thing, ID: {a6feb722-1dc9-4262-96b0-96489507508f})
----------
The name of the ParamType (ThingClass: gpioButtonRpi, Type: thing, ID: {234538be-710d-4a0b-9cb9-ac57b47ab14d})
----------
The name of the ParamType (ThingClass: gpioInputRpi, Type: thing, ID: {b45ca4a8-c67a-411c-957c-0e78e1f12c0b})
----------
The name of the ParamType (ThingClass: gpioOutputRpi, Type: thing, ID: {9eda783f-6d9f-4d39-986d-d2cbfff5a7dd})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="150"/>
<source>Long press time</source>
<extracomment>The name of the ParamType (ThingClass: gpioController, Type: plugin, ID: {bfb31f88-b481-49e1-9a0a-41b156b64efe})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="153"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="156"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="214"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="217"/>
<source>Long pressed</source>
<extracomment>The name of the EventType ({6b439e89-2cac-482a-b012-452c7c665acb}) of ThingClass gpioInputBbb
<extracomment>The name of the EventType ({11ffeeed-23fe-4cd7-bf15-c95c7250448c}) of ThingClass gpioButtonBbb
----------
The name of the EventType ({0df945d3-38df-4560-b42a-12b05545904d}) of ThingClass gpioInputRpi</extracomment>
The name of the EventType ({5ad39e3d-b155-4091-a7ef-d843c00d75aa}) of ThingClass gpioButtonRpi</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="159"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="162"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="165"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="168"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="171"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="174"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="220"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="223"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="226"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="229"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="232"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="235"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="238"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="241"/>
<source>Pin number</source>
<extracomment>The name of the ParamType (ThingClass: counterBbb, Type: thing, ID: {f9da4a22-b010-4823-9b1c-d1f422c3ad2b})
----------
The name of the ParamType (ThingClass: gpioButtonBbb, Type: thing, ID: {4c24d8f5-8b87-457f-a64b-aa52f7f81dc0})
----------
The name of the ParamType (ThingClass: gpioInputBbb, Type: thing, ID: {f383bf1d-3ac0-4808-a82c-18748baf085d})
----------
The name of the ParamType (ThingClass: gpioOutputBbb, Type: thing, ID: {14f65be0-ee84-42e4-8fcb-d98a9926a247})
----------
The name of the ParamType (ThingClass: counterRpi, Type: thing, ID: {b2c194bd-1aef-4851-a290-dd45269cc592})
----------
The name of the ParamType (ThingClass: gpioButtonRpi, Type: thing, ID: {90735212-d518-43c0-8fe9-aaa5362a512d})
----------
The name of the ParamType (ThingClass: gpioInputRpi, Type: thing, ID: {efd3df4a-d2b6-44f3-9095-7bba07891735})
----------
The name of the ParamType (ThingClass: gpioOutputRpi, Type: thing, ID: {2204d278-7bc7-407f-ac82-ce3ae1d5779c})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="99"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="102"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="105"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="108"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="111"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="114"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="145"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="148"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="151"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="154"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="157"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="160"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="163"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="166"/>
<source>Description</source>
<extracomment>The name of the ParamType (ThingClass: counterBbb, Type: thing, ID: {cba6a527-9f5c-4c05-8602-60e0c920fd26})
----------
The name of the ParamType (ThingClass: gpioButtonBbb, Type: thing, ID: {fc7850b7-3b9c-4df9-8153-40f3582213ea})
----------
The name of the ParamType (ThingClass: gpioInputBbb, Type: thing, ID: {da746cde-2380-4ee5-bf2c-017249fcdeef})
----------
The name of the ParamType (ThingClass: gpioOutputBbb, Type: thing, ID: {760aa4ed-d933-4188-aec8-16285d763aa5})
----------
The name of the ParamType (ThingClass: counterRpi, Type: thing, ID: {f7b82516-ed2c-4d73-86fa-957b8b6737e4})
----------
The name of the ParamType (ThingClass: gpioButtonRpi, Type: thing, ID: {5ea2fbf9-fd20-4bd7-b0ed-08f72f18157f})
----------
The name of the ParamType (ThingClass: gpioInputRpi, Type: thing, ID: {720bb37e-56e6-419e-878e-8c80aaf7ce32})
----------
The name of the ParamType (ThingClass: gpioOutputRpi, Type: thing, ID: {504798eb-1faa-4703-a57a-2778e4bf9a67})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="195"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="198"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="268"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="271"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="274"/>
<source>Power changed</source>
<extracomment>The name of the EventType ({82b567c6-a33c-484e-b5e7-e04795498d00}) of ThingClass gpioOutputBbb
<extracomment>The name of the EventType ({22440876-417a-4d57-8e01-efe26ef9f235}) of ThingClass gpioInputBbb
----------
The name of the EventType ({82b567c6-a33c-484e-b5e7-e04795498d00}) of ThingClass gpioOutputBbb
----------
The name of the EventType ({06843766-358e-44b0-8d52-2b46ef98459a}) of ThingClass gpioOutputRpi</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="177"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="180"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="183"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="186"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="189"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="192"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="244"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="247"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="250"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="253"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="256"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="259"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="262"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="265"/>
<source>Power</source>
<extracomment>The name of the ParamType (ThingClass: gpioOutputBbb, ActionType: power, ID: {82b567c6-a33c-484e-b5e7-e04795498d00})
<extracomment>The name of the ParamType (ThingClass: gpioInputBbb, EventType: power, ID: {22440876-417a-4d57-8e01-efe26ef9f235})
----------
The name of the StateType ({22440876-417a-4d57-8e01-efe26ef9f235}) of ThingClass gpioInputBbb
----------
The name of the ParamType (ThingClass: gpioOutputBbb, ActionType: power, ID: {82b567c6-a33c-484e-b5e7-e04795498d00})
----------
The name of the ParamType (ThingClass: gpioOutputBbb, EventType: power, ID: {82b567c6-a33c-484e-b5e7-e04795498d00})
----------
@ -163,8 +205,17 @@ The name of the StateType ({06843766-358e-44b0-8d52-2b46ef98459a}) of ThingClass
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="135"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="138"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="193"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="196"/>
<source>GPIO Button</source>
<extracomment>The name of the ThingClass ({4a4b79b9-7e43-4fd7-840f-31108bef0ee2})
----------
The name of the ThingClass ({1abd4dad-0757-4160-8df1-75c45bd61e6e})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="199"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="202"/>
<source>GPIO Input</source>
<extracomment>The name of the ThingClass ({ffd2aa29-55cc-4824-ba95-c311784f7824})
----------
@ -172,8 +223,29 @@ The name of the ThingClass ({6aff228b-0410-4ef9-9593-51e8639aacea})</extracommen
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="222"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="225"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="277"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="280"/>
<source>Powered</source>
<extracomment>The name of the ParamType (ThingClass: gpioInputRpi, EventType: power, ID: {57f1b7cc-26c8-434b-ba04-d3077dc886c8})
----------
The name of the StateType ({57f1b7cc-26c8-434b-ba04-d3077dc886c8}) of ThingClass gpioInputRpi</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="283"/>
<source>Powered changed</source>
<extracomment>The name of the EventType ({57f1b7cc-26c8-434b-ba04-d3077dc886c8}) of ThingClass gpioInputRpi</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="292"/>
<source>Raspberry Pi</source>
<extracomment>The name of the vendor ({f0d00b66-bbd8-4a07-8591-ea48a61b229e})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="295"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="298"/>
<source>Set power</source>
<extracomment>The name of the ActionType ({82b567c6-a33c-484e-b5e7-e04795498d00}) of ThingClass gpioOutputBbb
----------
@ -181,31 +253,16 @@ The name of the ActionType ({06843766-358e-44b0-8d52-2b46ef98459a}) of ThingClas
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="213"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="216"/>
<source>Pressed changed</source>
<extracomment>The name of the EventType ({22440876-417a-4d57-8e01-efe26ef9f235}) of ThingClass gpioInputBbb
----------
The name of the EventType ({57f1b7cc-26c8-434b-ba04-d3077dc886c8}) of ThingClass gpioInputRpi</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="201"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="204"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="207"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="210"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="286"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="289"/>
<source>Pressed</source>
<extracomment>The name of the ParamType (ThingClass: gpioInputBbb, EventType: pressed, ID: {22440876-417a-4d57-8e01-efe26ef9f235})
<extracomment>The name of the EventType ({d02b16a8-a242-41f5-b4e0-d3209849f25e}) of ThingClass gpioButtonBbb
----------
The name of the StateType ({22440876-417a-4d57-8e01-efe26ef9f235}) of ThingClass gpioInputBbb
----------
The name of the ParamType (ThingClass: gpioInputRpi, EventType: pressed, ID: {57f1b7cc-26c8-434b-ba04-d3077dc886c8})
----------
The name of the StateType ({57f1b7cc-26c8-434b-ba04-d3077dc886c8}) of ThingClass gpioInputRpi</extracomment>
The name of the EventType ({28330833-158c-4f99-9f6e-407ee8f29a4e}) of ThingClass gpioButtonRpi</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="72"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/gpio/plugininfo.h" line="118"/>
<source>Beaglebone Black</source>
<extracomment>The name of the vendor ({7835d14b-b455-49bd-9f31-72c6e8c3033d})</extracomment>
<translation type="unfinished"></translation>
@ -214,27 +271,33 @@ The name of the StateType ({57f1b7cc-26c8-434b-ba04-d3077dc886c8}) of ThingClass
<context>
<name>IntegrationPluginGpio</name>
<message>
<location filename="../integrationplugingpio.cpp" line="49"/>
<location filename="../integrationplugingpio.cpp" line="76"/>
<source>No GPIOs found on this system.</source>
<extracomment>Error setting up GPIO thing</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../integrationplugingpio.cpp" line="67"/>
<location filename="../integrationplugingpio.cpp" line="89"/>
<source>Exporting GPIO failed.</source>
<extracomment>Error setting up GPIO thing</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../integrationplugingpio.cpp" line="73"/>
<location filename="../integrationplugingpio.cpp" line="96"/>
<source>Configuring output GPIO failed.</source>
<extracomment>Error setting up GPIO thing</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../integrationplugingpio.cpp" line="79"/>
<location filename="../integrationplugingpio.cpp" line="342"/>
<location filename="../integrationplugingpio.cpp" line="362"/>
<location filename="../integrationplugingpio.cpp" line="103"/>
<source>Configuring GPIO active low failed.</source>
<extracomment>Error setting up GPIO thing</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../integrationplugingpio.cpp" line="110"/>
<location filename="../integrationplugingpio.cpp" line="431"/>
<location filename="../integrationplugingpio.cpp" line="451"/>
<source>Setting GPIO value failed.</source>
<extracomment>Error setting up GPIO thing
----------
@ -242,20 +305,25 @@ Error executing GPIO action</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../integrationplugingpio.cpp" line="107"/>
<location filename="../integrationplugingpio.cpp" line="137"/>
<location filename="../integrationplugingpio.cpp" line="130"/>
<location filename="../integrationplugingpio.cpp" line="162"/>
<source>Enabling GPIO monitor failed.</source>
<extracomment>Error setting up GPIO thing</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../integrationplugingpio.cpp" line="164"/>
<location filename="../integrationplugingpio.cpp" line="191"/>
<source>Enabling GPIO button failed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../integrationplugingpio.cpp" line="233"/>
<source>No GPIOs available on this system.</source>
<extracomment>Error discovering GPIO devices</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../integrationplugingpio.cpp" line="326"/>
<location filename="../integrationplugingpio.cpp" line="415"/>
<source>GPIO not found</source>
<extracomment>Error executing GPIO action</extracomment>
<translation type="unfinished"></translation>