made RF433 GPIO selectable
removed receiving devices temporary added elro devices added name param for 433 devices cleanup 433 plugins
This commit is contained in:
parent
1c008d0bef
commit
ae1335f392
5
guh.pri
5
guh.pri
@ -14,6 +14,11 @@ coverage {
|
|||||||
QMAKE_LFLAGS += -fprofile-arcs
|
QMAKE_LFLAGS += -fprofile-arcs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Enable Radio 433 MHz for GPIO's
|
||||||
|
enable433gpio {
|
||||||
|
DEFINES += GPIO433
|
||||||
|
}
|
||||||
|
|
||||||
top_srcdir=$$PWD
|
top_srcdir=$$PWD
|
||||||
top_builddir=$$shadowed($$PWD)
|
top_builddir=$$shadowed($$PWD)
|
||||||
|
|
||||||
|
|||||||
8
guh.pro
8
guh.pro
@ -22,6 +22,14 @@ test.commands = LD_LIBRARY_PATH=$$top_builddir/libguh make check
|
|||||||
|
|
||||||
QMAKE_EXTRA_TARGETS += licensecheck doc test
|
QMAKE_EXTRA_TARGETS += licensecheck doc test
|
||||||
|
|
||||||
|
message("Building guh version $${GUH_VERSION_STRING}")
|
||||||
|
|
||||||
coverage {
|
coverage {
|
||||||
message("Building coverage.")
|
message("Building coverage.")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
contains(DEFINES, GPIO433){
|
||||||
|
message("Radio 433 for GPIO's enabled")
|
||||||
|
} else {
|
||||||
|
message("Radio 433 for GPIO's disabled")
|
||||||
|
}
|
||||||
|
|||||||
@ -37,6 +37,10 @@
|
|||||||
The second possibility to sent data to a 433 MHz device is the \l{http://www.brennenstuhl.de/de-DE/steckdosenleisten-schaltgeraete-und-adapter/brematic-hausautomation/brematic-home-automation-gateway-gwy-433-1.html}
|
The second possibility to sent data to a 433 MHz device is the \l{http://www.brennenstuhl.de/de-DE/steckdosenleisten-schaltgeraete-und-adapter/brematic-hausautomation/brematic-home-automation-gateway-gwy-433-1.html}
|
||||||
{Brennenstuhl 433 MHz LAN Gateway}. If there is a Gateway in the local network, this class will automaticaly detect
|
{Brennenstuhl 433 MHz LAN Gateway}. If there is a Gateway in the local network, this class will automaticaly detect
|
||||||
it and will be used. If both transmitter are available (Gateway + GPIO), each signal will be transmitted over both sender.
|
it and will be used. If both transmitter are available (Gateway + GPIO), each signal will be transmitted over both sender.
|
||||||
|
|
||||||
|
\note: Radio 433 on GPIO's is by default disabled. If you want to enable it, you need to compile the source with the qmake config \tt{CONFIG+=radio433gpio}
|
||||||
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*! \fn void Radio433::dataReceived(QList<int> rawData)
|
/*! \fn void Radio433::dataReceived(QList<int> rawData)
|
||||||
@ -50,20 +54,26 @@
|
|||||||
Radio433::Radio433(QObject *parent) :
|
Radio433::Radio433(QObject *parent) :
|
||||||
QObject(parent)
|
QObject(parent)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
#ifdef GPIO433
|
||||||
m_receiver = new Radio433Receiver(this,27);
|
m_receiver = new Radio433Receiver(this,27);
|
||||||
m_transmitter = new Radio433Trasmitter(this,22);
|
m_transmitter = new Radio433Trasmitter(this,22);
|
||||||
m_brennenstuhlTransmitter = new Radio433BrennenstuhlGateway(this);
|
|
||||||
|
|
||||||
connect(m_receiver, &Radio433Receiver::readingChanged, this, &Radio433::readingChanged);
|
connect(m_receiver, &Radio433Receiver::readingChanged, this, &Radio433::readingChanged);
|
||||||
connect(m_receiver, &Radio433Receiver::dataReceived, this, &Radio433::dataReceived);
|
connect(m_receiver, &Radio433Receiver::dataReceived, this, &Radio433::dataReceived);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
m_brennenstuhlTransmitter = new Radio433BrennenstuhlGateway(this);
|
||||||
connect(m_brennenstuhlTransmitter, &Radio433BrennenstuhlGateway::availableChanged, this, &Radio433::brennenstuhlAvailableChanged);
|
connect(m_brennenstuhlTransmitter, &Radio433BrennenstuhlGateway::availableChanged, this, &Radio433::brennenstuhlAvailableChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*! Destroys the hardware resource Radio433 object. */
|
/*! Destroys the hardware resource Radio433 object. */
|
||||||
Radio433::~Radio433()
|
Radio433::~Radio433()
|
||||||
{
|
{
|
||||||
|
#ifdef GPIO433
|
||||||
m_receiver->quit();
|
m_receiver->quit();
|
||||||
m_transmitter->quit();
|
m_transmitter->quit();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*! Enables GPIO transmitter and receiver and the Brennenstuhl Lan Gateway.
|
/*! Enables GPIO transmitter and receiver and the Brennenstuhl Lan Gateway.
|
||||||
@ -72,6 +82,7 @@ bool Radio433::enable()
|
|||||||
{
|
{
|
||||||
m_brennenstuhlTransmitter->enable();
|
m_brennenstuhlTransmitter->enable();
|
||||||
|
|
||||||
|
#ifdef GPIO433
|
||||||
// check if GPIOs are available
|
// check if GPIOs are available
|
||||||
QFileInfo gpioFile("/sys/class/gpio/export");
|
QFileInfo gpioFile("/sys/class/gpio/export");
|
||||||
if (gpioFile.exists()) {
|
if (gpioFile.exists()) {
|
||||||
@ -91,6 +102,8 @@ bool Radio433::enable()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
qDebug() << "--> Radio 433 MHz GPIO's enabled.";
|
qDebug() << "--> Radio 433 MHz GPIO's enabled.";
|
||||||
|
#endif
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -98,19 +111,14 @@ bool Radio433::enable()
|
|||||||
bool Radio433::disabel()
|
bool Radio433::disabel()
|
||||||
{
|
{
|
||||||
m_brennenstuhlTransmitter->disable();
|
m_brennenstuhlTransmitter->disable();
|
||||||
|
|
||||||
|
#ifdef GPIO433
|
||||||
if (m_receiver->stopReceiver()) {
|
if (m_receiver->stopReceiver()) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
#endif
|
||||||
|
return true;
|
||||||
void Radio433::readingChanged(bool reading)
|
|
||||||
{
|
|
||||||
if (reading) {
|
|
||||||
m_transmitter->allowSending(false);
|
|
||||||
} else {
|
|
||||||
m_transmitter->allowSending(true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Radio433::brennenstuhlAvailableChanged(const bool &available)
|
void Radio433::brennenstuhlAvailableChanged(const bool &available)
|
||||||
@ -132,10 +140,12 @@ bool Radio433::sendData(int delay, QList<int> rawData, int repetitions)
|
|||||||
sendBrennenstuhl = m_brennenstuhlTransmitter->sendData(delay, rawData, repetitions);
|
sendBrennenstuhl = m_brennenstuhlTransmitter->sendData(delay, rawData, repetitions);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef GPIO433
|
||||||
if (m_transmitter->available()) {
|
if (m_transmitter->available()) {
|
||||||
m_transmitter->sendData(delay, rawData, repetitions);
|
m_transmitter->sendData(delay, rawData, repetitions);
|
||||||
sendGpio = true;
|
sendGpio = true;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return (sendGpio || sendBrennenstuhl);
|
return (sendGpio || sendBrennenstuhl);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -21,8 +21,11 @@
|
|||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
|
||||||
|
#ifdef GPIO433
|
||||||
#include "radio433receiver.h"
|
#include "radio433receiver.h"
|
||||||
#include "radio433transmitter.h"
|
#include "radio433transmitter.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "radio433brennenstuhlgateway.h"
|
#include "radio433brennenstuhlgateway.h"
|
||||||
|
|
||||||
class Radio433 : public QObject
|
class Radio433 : public QObject
|
||||||
@ -36,15 +39,17 @@ public:
|
|||||||
bool disabel();
|
bool disabel();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
#ifdef GPIO433
|
||||||
Radio433Receiver *m_receiver;
|
Radio433Receiver *m_receiver;
|
||||||
Radio433Trasmitter *m_transmitter;
|
Radio433Trasmitter *m_transmitter;
|
||||||
|
#endif
|
||||||
|
|
||||||
Radio433BrennenstuhlGateway *m_brennenstuhlTransmitter;
|
Radio433BrennenstuhlGateway *m_brennenstuhlTransmitter;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void dataReceived(QList<int> rawData);
|
void dataReceived(QList<int> rawData);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void readingChanged(bool reading);
|
|
||||||
void brennenstuhlAvailableChanged(const bool &available);
|
void brennenstuhlAvailableChanged(const bool &available);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
|||||||
@ -30,13 +30,13 @@ Radio433BrennenstuhlGateway::Radio433BrennenstuhlGateway(QObject *parent) :
|
|||||||
|
|
||||||
// Timer for discovery of the Gateway
|
// Timer for discovery of the Gateway
|
||||||
m_discoverTimer = new QTimer(this);
|
m_discoverTimer = new QTimer(this);
|
||||||
m_discoverTimer->setInterval(2000);
|
m_discoverTimer->setInterval(5000);
|
||||||
connect(m_discoverTimer, &QTimer::timeout, this, &Radio433BrennenstuhlGateway::discover);
|
connect(m_discoverTimer, &QTimer::timeout, this, &Radio433BrennenstuhlGateway::discover);
|
||||||
|
|
||||||
// Timer to detect discovery timeout
|
// Timer to detect discovery timeout
|
||||||
m_timeout = new QTimer(this);
|
m_timeout = new QTimer(this);
|
||||||
m_timeout->setSingleShot(true);
|
m_timeout->setSingleShot(true);
|
||||||
m_timeout->setInterval(1500);
|
m_timeout->setInterval(3000);
|
||||||
connect(m_timeout, &QTimer::timeout, this, &Radio433BrennenstuhlGateway::timeout);
|
connect(m_timeout, &QTimer::timeout, this, &Radio433BrennenstuhlGateway::timeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -60,11 +60,6 @@ DeviceManager::HardwareResources DevicePluginConrad::requiredHardware() const
|
|||||||
|
|
||||||
DeviceManager::DeviceSetupStatus DevicePluginConrad::setupDevice(Device *device)
|
DeviceManager::DeviceSetupStatus DevicePluginConrad::setupDevice(Device *device)
|
||||||
{
|
{
|
||||||
if (device->deviceClassId() == conradRemoteDeviceClassId) {
|
|
||||||
device->setName(device->paramValue("name").toString() + " (Conrad Remote)");
|
|
||||||
return DeviceManager::DeviceSetupStatusSuccess;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (device->deviceClassId() == conradShutterDeviceClassId) {
|
if (device->deviceClassId() == conradShutterDeviceClassId) {
|
||||||
device->setName(device->paramValue("name").toString() + " (Conrad shutter RSM900R)");
|
device->setName(device->paramValue("name").toString() + " (Conrad shutter RSM900R)");
|
||||||
return DeviceManager::DeviceSetupStatusSuccess;
|
return DeviceManager::DeviceSetupStatusSuccess;
|
||||||
@ -186,15 +181,4 @@ void DevicePluginConrad::radioData(const QList<int> &rawData)
|
|||||||
}
|
}
|
||||||
|
|
||||||
qDebug() << "CONRAD: " << binCode.left(binCode.length() - 24) << " ID = " << binCode.right(24);
|
qDebug() << "CONRAD: " << binCode.left(binCode.length() - 24) << " ID = " << binCode.right(24);
|
||||||
|
|
||||||
// // FIXME: find a better way to get to the remote DeviceClass
|
|
||||||
// DeviceClass deviceClass = supportedDevices().first();
|
|
||||||
// foreach (const EventType &eventType, deviceClass.events()) {
|
|
||||||
// if (eventType.name() == buttonCode) {
|
|
||||||
// qDebug() << "emit event " << pluginName() << familyCode << eventType.name() << power;
|
|
||||||
// Event event = Event(eventType.id(), device->id(), params);
|
|
||||||
// emit emitEvent(event);
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,40 +6,6 @@
|
|||||||
"name": "Conrad Electronic SE",
|
"name": "Conrad Electronic SE",
|
||||||
"id": "986cf06f-3ef1-4271-b2a3-2cc277ebecb6",
|
"id": "986cf06f-3ef1-4271-b2a3-2cc277ebecb6",
|
||||||
"deviceClasses": [
|
"deviceClasses": [
|
||||||
{
|
|
||||||
"deviceClassId": "17cd2492-28ab-4827-ba6e-5ef35be23f1b",
|
|
||||||
"name": "Conrad Remote",
|
|
||||||
"idName": "conradRemote",
|
|
||||||
"createMethods": ["user"],
|
|
||||||
"paramTypes": [
|
|
||||||
{
|
|
||||||
"name": "name",
|
|
||||||
"type": "QString",
|
|
||||||
"inputType": "TextLine"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"eventTypes": [
|
|
||||||
{
|
|
||||||
"id": "1f4050f5-4c90-4799-8d6d-e4069f3a2519",
|
|
||||||
"name": "Button pressed",
|
|
||||||
"idName": "remoteButtonPressed",
|
|
||||||
"paramTypes": [
|
|
||||||
{
|
|
||||||
"name": "button",
|
|
||||||
"type": "int"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "group",
|
|
||||||
"type": "int"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "power",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"deviceClassId": "2bb14180-aa5d-4999-992d-e6d464cff486",
|
"deviceClassId": "2bb14180-aa5d-4999-992d-e6d464cff486",
|
||||||
"name": "Conrad shutter RSM900R",
|
"name": "Conrad shutter RSM900R",
|
||||||
|
|||||||
@ -57,73 +57,78 @@ DeviceManager::HardwareResources DevicePluginElro::requiredHardware() const
|
|||||||
|
|
||||||
DeviceManager::DeviceError DevicePluginElro::executeAction(Device *device, const Action &action)
|
DeviceManager::DeviceError DevicePluginElro::executeAction(Device *device, const Action &action)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
if (action.actionTypeId() != powerOnActionTypeId && action.actionTypeId() != powerOffActionTypeId) {
|
||||||
|
return DeviceManager::DeviceErrorActionTypeNotFound;
|
||||||
|
}
|
||||||
|
|
||||||
QList<int> rawData;
|
QList<int> rawData;
|
||||||
QByteArray binCode;
|
QByteArray binCode;
|
||||||
|
|
||||||
// =======================================
|
|
||||||
// create the bincode
|
// create the bincode
|
||||||
// channels
|
// channels
|
||||||
if(device->paramValue("channel 1").toBool()){
|
if (device->paramValue("channel 1").toBool()) {
|
||||||
binCode.append("00");
|
binCode.append("00");
|
||||||
}else{
|
} else {
|
||||||
binCode.append("01");
|
binCode.append("01");
|
||||||
}
|
}
|
||||||
if(device->paramValue("channel 2").toBool()){
|
if (device->paramValue("channel 2").toBool()) {
|
||||||
binCode.append("00");
|
binCode.append("00");
|
||||||
}else{
|
} else {
|
||||||
binCode.append("01");
|
binCode.append("01");
|
||||||
}
|
}
|
||||||
if(device->paramValue("channel 3").toBool()){
|
if (device->paramValue("channel 3").toBool()) {
|
||||||
binCode.append("00");
|
binCode.append("00");
|
||||||
}else{
|
}else{
|
||||||
binCode.append("01");
|
binCode.append("01");
|
||||||
}
|
}
|
||||||
if(device->paramValue("channel 4").toBool()){
|
if(device->paramValue("channel 4").toBool()){
|
||||||
binCode.append("00");
|
binCode.append("00");
|
||||||
}else{
|
} else {
|
||||||
binCode.append("01");
|
binCode.append("01");
|
||||||
}
|
}
|
||||||
if(device->paramValue("channel 5").toBool()){
|
if (device->paramValue("channel 5").toBool()) {
|
||||||
binCode.append("00");
|
binCode.append("00");
|
||||||
}else{
|
} else {
|
||||||
binCode.append("01");
|
binCode.append("01");
|
||||||
}
|
}
|
||||||
|
|
||||||
// =======================================
|
|
||||||
// Buttons
|
// Buttons
|
||||||
if(device->paramValue("A").toBool()){
|
if (device->paramValue("A").toBool()) {
|
||||||
binCode.append("00");
|
binCode.append("00");
|
||||||
}else{
|
} else {
|
||||||
binCode.append("01");
|
binCode.append("01");
|
||||||
}
|
}
|
||||||
if(device->paramValue("B").toBool()){
|
if (device->paramValue("B").toBool()) {
|
||||||
binCode.append("00");
|
binCode.append("00");
|
||||||
}else{
|
} else {
|
||||||
binCode.append("01");
|
binCode.append("01");
|
||||||
}
|
}
|
||||||
if(device->paramValue("C").toBool()){
|
if (device->paramValue("C").toBool()) {
|
||||||
binCode.append("00");
|
binCode.append("00");
|
||||||
}else{
|
} else {
|
||||||
binCode.append("01");
|
binCode.append("01");
|
||||||
}
|
}
|
||||||
if(device->paramValue("D").toBool()){
|
if (device->paramValue("D").toBool()) {
|
||||||
binCode.append("00");
|
binCode.append("00");
|
||||||
}else{
|
} else {
|
||||||
binCode.append("01");
|
binCode.append("01");
|
||||||
}
|
}
|
||||||
if(device->paramValue("E").toBool()){
|
if (device->paramValue("E").toBool()) {
|
||||||
binCode.append("00");
|
binCode.append("00");
|
||||||
}else{
|
} else {
|
||||||
binCode.append("01");
|
binCode.append("01");
|
||||||
}
|
}
|
||||||
// Power
|
|
||||||
if(action.param("power").value().toBool()){
|
|
||||||
binCode.append("0001");
|
|
||||||
}else{
|
|
||||||
binCode.append("0100");
|
|
||||||
}
|
|
||||||
|
|
||||||
// =======================================
|
// Power
|
||||||
|
if (action.actionTypeId() == powerOnActionTypeId) {
|
||||||
|
binCode.append("0001");
|
||||||
|
} else if (action.actionTypeId() == powerOffActionTypeId) {
|
||||||
|
binCode.append("0100");
|
||||||
|
} else {
|
||||||
|
return DeviceManager::DeviceErrorActionTypeNotFound;
|
||||||
|
}
|
||||||
|
|
||||||
//create rawData timings list
|
//create rawData timings list
|
||||||
int delay = 350;
|
int delay = 350;
|
||||||
|
|
||||||
@ -133,21 +138,20 @@ DeviceManager::DeviceError DevicePluginElro::executeAction(Device *device, const
|
|||||||
|
|
||||||
// add the code
|
// add the code
|
||||||
foreach (QChar c, binCode) {
|
foreach (QChar c, binCode) {
|
||||||
if(c == '0'){
|
if (c == '0') {
|
||||||
rawData.append(1);
|
rawData.append(1);
|
||||||
rawData.append(3);
|
rawData.append(3);
|
||||||
}else{
|
} else {
|
||||||
rawData.append(3);
|
rawData.append(3);
|
||||||
rawData.append(1);
|
rawData.append(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// =======================================
|
|
||||||
// send data to hardware resource
|
// send data to hardware resource
|
||||||
if(transmitData(delay, rawData)){
|
if (transmitData(delay, rawData)) {
|
||||||
qDebug() << "transmitted" << pluginName() << device->name() << "power: " << action.param("power").value().toBool();
|
qDebug() << "transmitted" << pluginName() << device->name() << "power: " << action.param("power").value().toBool();
|
||||||
return DeviceManager::DeviceErrorNoError;
|
return DeviceManager::DeviceErrorNoError;
|
||||||
}else{
|
} else {
|
||||||
qDebug() << "could not transmitt" << pluginName() << device->name() << "power: " << action.param("power").value().toBool();
|
qDebug() << "could not transmitt" << pluginName() << device->name() << "power: " << action.param("power").value().toBool();
|
||||||
return DeviceManager::DeviceErrorHardwareNotAvailable;
|
return DeviceManager::DeviceErrorHardwareNotAvailable;
|
||||||
}
|
}
|
||||||
@ -156,7 +160,7 @@ DeviceManager::DeviceError DevicePluginElro::executeAction(Device *device, const
|
|||||||
void DevicePluginElro::radioData(const QList<int> &rawData)
|
void DevicePluginElro::radioData(const QList<int> &rawData)
|
||||||
{
|
{
|
||||||
// filter right here a wrong signal length
|
// filter right here a wrong signal length
|
||||||
if(rawData.length() != 49){
|
if (rawData.length() != 49) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -164,61 +168,60 @@ void DevicePluginElro::radioData(const QList<int> &rawData)
|
|||||||
QByteArray binCode;
|
QByteArray binCode;
|
||||||
|
|
||||||
// average 314
|
// average 314
|
||||||
if(delay > 290 && delay < 400){
|
if (delay > 290 && delay < 400) {
|
||||||
// go trough all 48 timings (without sync signal)
|
// go trough all 48 timings (without sync signal)
|
||||||
for(int i = 1; i <= 48; i+=2 ){
|
for (int i = 1; i <= 48; i+=2 ) {
|
||||||
int div;
|
int div;
|
||||||
int divNext;
|
int divNext;
|
||||||
|
|
||||||
// if short
|
// if short
|
||||||
if(rawData.at(i) <= 700){
|
if (rawData.at(i) <= 700) {
|
||||||
div = 1;
|
div = 1;
|
||||||
}else{
|
} else {
|
||||||
div = 3;
|
div = 3;
|
||||||
}
|
}
|
||||||
// if long
|
// if long
|
||||||
if(rawData.at(i+1) < 700){
|
if (rawData.at(i+1) < 700) {
|
||||||
divNext = 1;
|
divNext = 1;
|
||||||
}else{
|
} else {
|
||||||
divNext = 3;
|
divNext = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
// _
|
||||||
* _
|
// | |___ = 0 -> in 4 delays => 1000
|
||||||
* | |___ = 0 -> in 4 delays => 1000
|
// _
|
||||||
* _
|
// ___| | = 1 -> in 4 delays => 0001
|
||||||
* ___| | = 1 -> in 4 delays => 0001
|
|
||||||
*/
|
|
||||||
|
|
||||||
if(div == 1 && divNext == 3){
|
if (div == 1 && divNext == 3) {
|
||||||
binCode.append('0');
|
binCode.append('0');
|
||||||
}else if(div == 3 && divNext == 1){
|
} else if(div == 3 && divNext == 1) {
|
||||||
binCode.append('1');
|
binCode.append('1');
|
||||||
}else{
|
} else {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}else{
|
} else {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//qDebug() << "ELRO understands this protocol: " << binCode;
|
|
||||||
|
|
||||||
if(binCode.left(20) == "00000100000000000001"){
|
qDebug() << "ELRO understands this protocol: " << binCode;
|
||||||
if(binCode.right(4) == "0100"){
|
|
||||||
|
if (binCode.left(20) == "00000100000000000001") {
|
||||||
|
if (binCode.right(4) == "0100") {
|
||||||
qDebug() << "Motion Detector OFF";
|
qDebug() << "Motion Detector OFF";
|
||||||
}else{
|
} else {
|
||||||
qDebug() << "Motion Detector ON";
|
qDebug() << "Motion Detector ON";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// get the channel of the remote signal (5 channels, true=1, false=0)
|
// get the channel of the remote signal (5 channels, true=1, false=0)
|
||||||
QList<bool> group;
|
QList<bool> group;
|
||||||
for(int i = 1; i < 10; i+=2){
|
for (int i = 1; i < 10; i+=2) {
|
||||||
if(binCode.at(i-1) == '0' && binCode.at(i) == '1'){
|
if (binCode.at(i-1) == '0' && binCode.at(i) == '1') {
|
||||||
group << false;
|
group << false;
|
||||||
}else if(binCode.at(i-1) == '0' && binCode.at(i) == '0'){
|
} else if(binCode.at(i-1) == '0' && binCode.at(i) == '0') {
|
||||||
group << true;
|
group << true;
|
||||||
}else {
|
} else {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -227,59 +230,29 @@ void DevicePluginElro::radioData(const QList<int> &rawData)
|
|||||||
QString button;
|
QString button;
|
||||||
QByteArray buttonCode = binCode.mid(10,10);
|
QByteArray buttonCode = binCode.mid(10,10);
|
||||||
|
|
||||||
if(buttonCode == "0001010101"){
|
if (buttonCode == "0001010101") {
|
||||||
button = "A";
|
button = "A";
|
||||||
}else if(buttonCode == "0100010101"){
|
} else if (buttonCode == "0100010101") {
|
||||||
button = "B";
|
button = "B";
|
||||||
}else if(buttonCode == "0101000101"){
|
} else if (buttonCode == "0101000101") {
|
||||||
button = "C";
|
button = "C";
|
||||||
}else if(buttonCode == "0101010001"){
|
} else if(buttonCode == "0101010001") {
|
||||||
button = "D";
|
button = "D";
|
||||||
}else if(buttonCode == "0101010100"){
|
} else if(buttonCode == "0101010100") {
|
||||||
button = "E";
|
button = "E";
|
||||||
}else{
|
} else {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// get power status -> On = 0100, Off = 0001
|
// get power status -> On = 0100, Off = 0001
|
||||||
bool power;
|
bool power;
|
||||||
if(binCode.right(4).toInt(0,2) == 1){
|
if (binCode.right(4).toInt(0,2) == 1) {
|
||||||
power = true;
|
power = true;
|
||||||
}else if(binCode.right(4).toInt(0,2) == 4){
|
} else if(binCode.right(4).toInt(0,2) == 4) {
|
||||||
power = false;
|
power = false;
|
||||||
}else{
|
} else {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Device *device = 0;
|
qDebug() << "ELRO:" << group << buttonCode << power;
|
||||||
QList<Device*> deviceList = deviceManager()->findConfiguredDevices(elroRemoteDeviceClassId);
|
|
||||||
foreach (Device *dev, deviceList) {
|
|
||||||
if (dev->hasParam("channel 1") && dev->paramValue("channel 1").toBool() == group.at(0) &&
|
|
||||||
dev->hasParam("channel 2") && dev->paramValue("channel 2").toBool() == group.at(1) &&
|
|
||||||
dev->hasParam("channel 3") && dev->paramValue("channel 3").toBool() == group.at(2) &&
|
|
||||||
dev->hasParam("channel 4") && dev->paramValue("channel 4").toBool() == group.at(3) &&
|
|
||||||
dev->hasParam("channel 5") && dev->paramValue("channel 5").toBool() == group.at(4)
|
|
||||||
) {
|
|
||||||
// Yippie! We found the device.
|
|
||||||
device = dev;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!device) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ParamList params;
|
|
||||||
Param powerParam("power", power);
|
|
||||||
params.append(powerParam);
|
|
||||||
|
|
||||||
// FIXME: find a better way to get to the remote DeviceClass
|
|
||||||
DeviceClass deviceClass = supportedDevices().first();
|
|
||||||
foreach (const EventType &eventType, deviceClass.eventTypes()) {
|
|
||||||
if (eventType.name() == button) {
|
|
||||||
Event event = Event(eventType.id(), device->id(), params);
|
|
||||||
emit emitEvent(event);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,91 +6,17 @@
|
|||||||
"name": "Elro",
|
"name": "Elro",
|
||||||
"id": "435a13a0-65ca-4f0c-94c1-e5873b258db5",
|
"id": "435a13a0-65ca-4f0c-94c1-e5873b258db5",
|
||||||
"deviceClasses": [
|
"deviceClasses": [
|
||||||
{
|
|
||||||
"deviceClassId": "d85c1ef4-197c-4053-8e40-707aa671d302",
|
|
||||||
"idName": "elroRemote",
|
|
||||||
"name": "Elro Remote",
|
|
||||||
"createMethods": ["user"],
|
|
||||||
"paramTypes": [
|
|
||||||
{
|
|
||||||
"name": "channel 1",
|
|
||||||
"type": "bool"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "channel 2",
|
|
||||||
"type": "bool"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "channel 3",
|
|
||||||
"type": "bool"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "channel 4",
|
|
||||||
"type": "bool"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "channel 5",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"eventTypes": [
|
|
||||||
{
|
|
||||||
"id": "9dd3f862-35f3-4b69-954e-fa3c8bd68e39",
|
|
||||||
"name": "A",
|
|
||||||
"paramTypes": [
|
|
||||||
{
|
|
||||||
"name": "power",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "733226eb-91ba-4e37-9d78-12c87eb5e763",
|
|
||||||
"name": "B",
|
|
||||||
"paramTypes": [
|
|
||||||
{
|
|
||||||
"name": "power",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "47aaeaec-485a-4775-a543-33f339fd28c8",
|
|
||||||
"name": "C",
|
|
||||||
"paramTypes": [
|
|
||||||
{
|
|
||||||
"name": "power",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "db3d484c-add9-44ab-80a4-a0664e0c87c8",
|
|
||||||
"name": "D",
|
|
||||||
"paramTypes": [
|
|
||||||
{
|
|
||||||
"name": "power",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "eb914aac-fb73-4ee2-9f1b-c34b2f6cc24a",
|
|
||||||
"name": "E",
|
|
||||||
"paramTypes": [
|
|
||||||
{
|
|
||||||
"name": "power",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"deviceClassId": "308ae6e6-38b3-4b3a-a513-3199da2764f8",
|
"deviceClassId": "308ae6e6-38b3-4b3a-a513-3199da2764f8",
|
||||||
"name": "Elro switch",
|
"name": "Elro Socket (AB440D)",
|
||||||
|
"idName": "socketAB440D",
|
||||||
"createMethods": ["user"],
|
"createMethods": ["user"],
|
||||||
"paramTypes": [
|
"paramTypes": [
|
||||||
|
{
|
||||||
|
"name": "Name",
|
||||||
|
"type": "QString",
|
||||||
|
"inputType": "TextLine"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "channel 1",
|
"name": "channel 1",
|
||||||
"type": "bool"
|
"type": "bool"
|
||||||
@ -135,20 +61,204 @@
|
|||||||
"actionTypes": [
|
"actionTypes": [
|
||||||
{
|
{
|
||||||
"id": "31c9758e-6567-4f89-85bb-29e1a7c55d44",
|
"id": "31c9758e-6567-4f89-85bb-29e1a7c55d44",
|
||||||
"name": "Set power",
|
"idName": "powerOn",
|
||||||
"paramTypes": [
|
"name": "On"
|
||||||
{
|
},
|
||||||
"name": "power",
|
{
|
||||||
"type": "bool"
|
"id": "9ceb3233-20a3-46bf-b2af-faed1b7ab1ad",
|
||||||
}
|
"idName": "powerOff",
|
||||||
]
|
"name": "Off"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"deviceClassId": "4c64aee6-7a4f-41f2-b278-edc55f0da0d3",
|
"deviceClassId": "d29cf309-8a3e-4bcc-90ab-87d1adfb8985",
|
||||||
"name": "Elro motion detector",
|
"name": "Elro Bulb (AB440L)",
|
||||||
"createMethods": ["discovery"]
|
"idName": "bulbAB440L",
|
||||||
|
"createMethods": ["user"],
|
||||||
|
"paramTypes": [
|
||||||
|
{
|
||||||
|
"name": "Name",
|
||||||
|
"type": "QString",
|
||||||
|
"inputType": "TextLine"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "channel 1",
|
||||||
|
"type": "bool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "channel 2",
|
||||||
|
"type": "bool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "channel 3",
|
||||||
|
"type": "bool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "channel 4",
|
||||||
|
"type": "bool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "channel 5",
|
||||||
|
"type": "bool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "A",
|
||||||
|
"type": "bool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "B",
|
||||||
|
"type": "bool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "C",
|
||||||
|
"type": "bool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "D",
|
||||||
|
"type": "bool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "E",
|
||||||
|
"type": "bool"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"actionTypes": [
|
||||||
|
{
|
||||||
|
"id": "31c9758e-6567-4f89-85bb-29e1a7c55d44",
|
||||||
|
"name": "On"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "9ceb3233-20a3-46bf-b2af-faed1b7ab1ad",
|
||||||
|
"name": "Off"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"deviceClassId": "9516c818-7cbe-4ec2-a961-f29d7b918437",
|
||||||
|
"name": "Elro Socket (AB440S)",
|
||||||
|
"idName": "socketAB440S",
|
||||||
|
"createMethods": ["user"],
|
||||||
|
"paramTypes": [
|
||||||
|
{
|
||||||
|
"name": "Name",
|
||||||
|
"type": "QString",
|
||||||
|
"inputType": "TextLine"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "channel 1",
|
||||||
|
"type": "bool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "channel 2",
|
||||||
|
"type": "bool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "channel 3",
|
||||||
|
"type": "bool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "channel 4",
|
||||||
|
"type": "bool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "channel 5",
|
||||||
|
"type": "bool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "A",
|
||||||
|
"type": "bool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "B",
|
||||||
|
"type": "bool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "C",
|
||||||
|
"type": "bool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "D",
|
||||||
|
"type": "bool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "E",
|
||||||
|
"type": "bool"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"actionTypes": [
|
||||||
|
{
|
||||||
|
"id": "31c9758e-6567-4f89-85bb-29e1a7c55d44",
|
||||||
|
"name": "On"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "9ceb3233-20a3-46bf-b2af-faed1b7ab1ad",
|
||||||
|
"name": "Off"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"deviceClassId": "e03adc74-b972-451a-afd5-b562a7ab91cd",
|
||||||
|
"name": "Elro outdoor socket (AB440WD)",
|
||||||
|
"idName": "socketAB440WD",
|
||||||
|
"createMethods": ["user"],
|
||||||
|
"paramTypes": [
|
||||||
|
{
|
||||||
|
"name": "Name",
|
||||||
|
"type": "QString",
|
||||||
|
"inputType": "TextLine"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "channel 1",
|
||||||
|
"type": "bool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "channel 2",
|
||||||
|
"type": "bool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "channel 3",
|
||||||
|
"type": "bool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "channel 4",
|
||||||
|
"type": "bool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "channel 5",
|
||||||
|
"type": "bool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "A",
|
||||||
|
"type": "bool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "B",
|
||||||
|
"type": "bool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "C",
|
||||||
|
"type": "bool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "D",
|
||||||
|
"type": "bool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "E",
|
||||||
|
"type": "bool"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"actionTypes": [
|
||||||
|
{
|
||||||
|
"id": "31c9758e-6567-4f89-85bb-29e1a7c55d44",
|
||||||
|
"name": "On"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "9ceb3233-20a3-46bf-b2af-faed1b7ab1ad",
|
||||||
|
"name": "Off"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -104,7 +104,7 @@ DeviceManager::DeviceError DevicePluginIntertechno::executeAction(Device *device
|
|||||||
|
|
||||||
// =======================================
|
// =======================================
|
||||||
// generate bin from button code
|
// generate bin from button code
|
||||||
if(familyCode == "1") {
|
if (familyCode == "1") {
|
||||||
binCode.append("00000000");
|
binCode.append("00000000");
|
||||||
} else if (familyCode == "2") {
|
} else if (familyCode == "2") {
|
||||||
binCode.append("01000000");
|
binCode.append("01000000");
|
||||||
@ -190,10 +190,10 @@ void DevicePluginIntertechno::radioData(const QList<int> &rawData)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<Device*> deviceList = deviceManager()->findConfiguredDevices(intertechnoRemoteDeviceClassId);
|
// QList<Device*> deviceList = deviceManager()->findConfiguredDevices(intertechnoRemoteDeviceClassId);
|
||||||
if (deviceList.isEmpty()) {
|
// if (deviceList.isEmpty()) {
|
||||||
return;
|
// return;
|
||||||
}
|
// }
|
||||||
|
|
||||||
int delay = rawData.first()/31;
|
int delay = rawData.first()/31;
|
||||||
QByteArray binCode;
|
QByteArray binCode;
|
||||||
@ -378,34 +378,6 @@ void DevicePluginIntertechno::radioData(const QList<int> &rawData)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
qDebug() << "family code = " << familyCode << "button code =" << buttonCode << power;
|
qDebug() << "INTERTECHNO: family code = " << familyCode << "button code =" << buttonCode << power;
|
||||||
|
|
||||||
// ===================================================
|
|
||||||
Device *device = 0;
|
|
||||||
foreach (Device *dev, deviceList) {
|
|
||||||
if (dev->paramValue("familyCode").toString() == familyCode) {
|
|
||||||
// Yippie! We found the device.
|
|
||||||
device = dev;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!device) {
|
|
||||||
qWarning() << "couldn't find any configured device for intertech familyCode:" << familyCode;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ParamList params;
|
|
||||||
Param powerParam("power", power);
|
|
||||||
params.append(powerParam);
|
|
||||||
|
|
||||||
// FIXME: find a better way to get to the remote DeviceClass
|
|
||||||
DeviceClass deviceClass = supportedDevices().first();
|
|
||||||
foreach (const EventType &eventType, deviceClass.eventTypes()) {
|
|
||||||
if (eventType.name() == buttonCode) {
|
|
||||||
qDebug() << "emit event " << pluginName() << familyCode << eventType.name() << power;
|
|
||||||
Event event = Event(eventType.id(), device->id(), params);
|
|
||||||
emit emitEvent(event);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,187 +6,16 @@
|
|||||||
"name": "Intertechno",
|
"name": "Intertechno",
|
||||||
"id": "6a852bc2-34dd-4f4c-9ac9-dd4c32ddbcba",
|
"id": "6a852bc2-34dd-4f4c-9ac9-dd4c32ddbcba",
|
||||||
"deviceClasses": [
|
"deviceClasses": [
|
||||||
{
|
|
||||||
"deviceClassId": "ab73ad2f-6594-45a3-9063-8f72d365c5e5",
|
|
||||||
"idName": "intertechnoRemote",
|
|
||||||
"name": "Intertechno Remote",
|
|
||||||
"createMethods": ["user"],
|
|
||||||
"paramTypes": [
|
|
||||||
{
|
|
||||||
"name": "familyCode",
|
|
||||||
"type": "QString",
|
|
||||||
"inputType": "TextLine",
|
|
||||||
"allowedValues": ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P"]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"eventTypes": [
|
|
||||||
{
|
|
||||||
"id": "785c1b30-a3f2-4696-af7c-d532acf3d6f7",
|
|
||||||
"name": "Button 1 pressed",
|
|
||||||
"paramTypes": [
|
|
||||||
{
|
|
||||||
"name": "power",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "1d42c850-7b43-452f-b205-e1aac14eb3ee",
|
|
||||||
"name": "Button 2 pressed",
|
|
||||||
"paramTypes": [
|
|
||||||
{
|
|
||||||
"name": "power",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "77a4780e-2355-4a77-870d-2f675bf986ce",
|
|
||||||
"name": "Button 3 pressed",
|
|
||||||
"paramTypes": [
|
|
||||||
{
|
|
||||||
"name": "power",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "bd6a8b4b-f946-4f3b-992f-e7cff10187b8",
|
|
||||||
"name": "Button 4 pressed",
|
|
||||||
"paramTypes": [
|
|
||||||
{
|
|
||||||
"name": "power",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "0f20782e-0acc-45f1-8c42-5dc5f5b29f1b",
|
|
||||||
"name": "Button 5 pressed",
|
|
||||||
"paramTypes": [
|
|
||||||
{
|
|
||||||
"name": "power",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "f7cb439a-0528-4905-9583-06b6bfeb3ba1",
|
|
||||||
"name": "Button 6 pressed",
|
|
||||||
"paramTypes": [
|
|
||||||
{
|
|
||||||
"name": "power",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "a0b0d8d8-2b43-4897-98e0-05b6b408a950",
|
|
||||||
"name": "Button 7 pressed",
|
|
||||||
"paramTypes": [
|
|
||||||
{
|
|
||||||
"name": "power",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "ae5833a2-bc43-4462-ae47-e45dac1fb0ce",
|
|
||||||
"name": "Button 8 pressed",
|
|
||||||
"paramTypes": [
|
|
||||||
{
|
|
||||||
"name": "power",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "52c13828-d047-4256-b488-0bf84abbc87c",
|
|
||||||
"name": "Button 9 pressed",
|
|
||||||
"paramTypes": [
|
|
||||||
{
|
|
||||||
"name": "power",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "22c5afbc-835e-47cc-8211-4429eb9d9fee",
|
|
||||||
"name": "Button 10 pressed",
|
|
||||||
"paramTypes": [
|
|
||||||
{
|
|
||||||
"name": "power",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "6bec5cbc-8bfb-4c6c-8ac8-f8e7723fd5aa",
|
|
||||||
"name": "Button 11 pressed",
|
|
||||||
"paramTypes": [
|
|
||||||
{
|
|
||||||
"name": "power",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "8b71edd2-8135-4c8b-bf44-380efadf1942",
|
|
||||||
"name": "Button 12 pressed",
|
|
||||||
"paramTypes": [
|
|
||||||
{
|
|
||||||
"name": "power",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "192f36a4-1e58-41aa-9618-83d46e329a4b",
|
|
||||||
"name": "Button 13 pressed",
|
|
||||||
"paramTypes": [
|
|
||||||
{
|
|
||||||
"name": "power",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "6c76de60-5e19-4a29-b027-e71e66caa2d6",
|
|
||||||
"name": "Button 14 pressed",
|
|
||||||
"paramTypes": [
|
|
||||||
{
|
|
||||||
"name": "power",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "c2f56c10-1f81-4477-88fa-fc0f4a6383df",
|
|
||||||
"name": "Button 15 pressed",
|
|
||||||
"paramTypes": [
|
|
||||||
{
|
|
||||||
"name": "power",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "5d2eb3f8-4cd4-4c71-9c0c-e0b685e168e4",
|
|
||||||
"name": "Button 16 pressed",
|
|
||||||
"paramTypes": [
|
|
||||||
{
|
|
||||||
"name": "power",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"deviceClassId": "324219e8-7c53-41b5-b314-c2900cd15252",
|
"deviceClassId": "324219e8-7c53-41b5-b314-c2900cd15252",
|
||||||
"name": "Intertechno switch",
|
"name": "Intertechno switch",
|
||||||
"createMethods": ["user"],
|
"createMethods": ["user"],
|
||||||
"paramTypes": [
|
"paramTypes": [
|
||||||
|
{
|
||||||
|
"name": "Name",
|
||||||
|
"type": "QString",
|
||||||
|
"inputType": "TextLine"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "familyCode",
|
"name": "familyCode",
|
||||||
"type": "QString",
|
"type": "QString",
|
||||||
|
|||||||
@ -12,6 +12,11 @@
|
|||||||
"name": "RF Controller (LN-CON-RF20B)",
|
"name": "RF Controller (LN-CON-RF20B)",
|
||||||
"createMethods": ["user"],
|
"createMethods": ["user"],
|
||||||
"paramTypes": [
|
"paramTypes": [
|
||||||
|
{
|
||||||
|
"name": "Name",
|
||||||
|
"type": "QString",
|
||||||
|
"inputType": "TextLine"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "ID",
|
"name": "ID",
|
||||||
"type": "QString",
|
"type": "QString",
|
||||||
|
|||||||
@ -24,7 +24,6 @@
|
|||||||
LircClient::LircClient(QObject *parent) :
|
LircClient::LircClient(QObject *parent) :
|
||||||
QObject(parent)
|
QObject(parent)
|
||||||
{
|
{
|
||||||
|
|
||||||
m_socket = new QLocalSocket(this);
|
m_socket = new QLocalSocket(this);
|
||||||
QObject::connect(m_socket, &QLocalSocket::readyRead, this, &LircClient::readyRead);
|
QObject::connect(m_socket, &QLocalSocket::readyRead, this, &LircClient::readyRead);
|
||||||
}
|
}
|
||||||
@ -33,17 +32,12 @@ bool LircClient::connect()
|
|||||||
{
|
{
|
||||||
m_socket->connectToServer("/var/run/lirc/lircd", QIODevice::ReadWrite);
|
m_socket->connectToServer("/var/run/lirc/lircd", QIODevice::ReadWrite);
|
||||||
if (!m_socket->isOpen()) {
|
if (!m_socket->isOpen()) {
|
||||||
qWarning() << "Error connecting to lircd socket. Is Lircd running?";
|
qWarning() << "--> Lirc daemon NOT available.";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
m_socket->write("LIST\n");
|
||||||
qDebug() << "connected to lircd!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!11111";
|
qDebug() << "--> Lirc daemon available.";
|
||||||
|
|
||||||
qDebug() << "wrote to lirc:" << m_socket->write("LIST\n");
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void LircClient::readyRead()
|
void LircClient::readyRead()
|
||||||
@ -53,7 +47,7 @@ void LircClient::readyRead()
|
|||||||
bool inBlock = false;
|
bool inBlock = false;
|
||||||
while (m_socket->canReadLine()) {
|
while (m_socket->canReadLine()) {
|
||||||
QByteArray line = m_socket->readLine().trimmed();
|
QByteArray line = m_socket->readLine().trimmed();
|
||||||
qDebug() << "got line:" << line;
|
//qDebug() << "got line:" << line;
|
||||||
if (line == "BEGIN") {
|
if (line == "BEGIN") {
|
||||||
inBlock = true;
|
inBlock = true;
|
||||||
continue;
|
continue;
|
||||||
@ -87,7 +81,7 @@ void LircClient::readRemotes()
|
|||||||
{
|
{
|
||||||
m_socket->readLine(); // IGNORE DATA
|
m_socket->readLine(); // IGNORE DATA
|
||||||
int remoteCount = m_socket->readLine().trimmed().toInt();
|
int remoteCount = m_socket->readLine().trimmed().toInt();
|
||||||
qDebug() << "found" << remoteCount << "remotes";
|
qDebug() << "found" << remoteCount << "lirc remotes";
|
||||||
for (int i = 0; i < remoteCount; i++) {
|
for (int i = 0; i < remoteCount; i++) {
|
||||||
QByteArray line = m_socket->readLine().trimmed();
|
QByteArray line = m_socket->readLine().trimmed();
|
||||||
m_remotes.append(line);
|
m_remotes.append(line);
|
||||||
|
|||||||
@ -11,6 +11,11 @@
|
|||||||
"name": "Unitec switch (48111)",
|
"name": "Unitec switch (48111)",
|
||||||
"createMethods": ["user"],
|
"createMethods": ["user"],
|
||||||
"paramTypes": [
|
"paramTypes": [
|
||||||
|
{
|
||||||
|
"name": "Name",
|
||||||
|
"type": "QString",
|
||||||
|
"inputType": "TextLine"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "Channel",
|
"name": "Channel",
|
||||||
"type": "QString",
|
"type": "QString",
|
||||||
|
|||||||
@ -11,6 +11,11 @@
|
|||||||
"name": "WiFi Device",
|
"name": "WiFi Device",
|
||||||
"createMethods": ["user"],
|
"createMethods": ["user"],
|
||||||
"paramTypes": [
|
"paramTypes": [
|
||||||
|
{
|
||||||
|
"name": "Name",
|
||||||
|
"type": "QString",
|
||||||
|
"inputType": "TextLine"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "MAC",
|
"name": "MAC",
|
||||||
"type": "QString",
|
"type": "QString",
|
||||||
|
|||||||
@ -1,7 +1,5 @@
|
|||||||
include(../guh.pri)
|
include(../guh.pri)
|
||||||
|
|
||||||
message("Building guh version $${GUH_VERSION_STRING}")
|
|
||||||
|
|
||||||
TARGET = guhd
|
TARGET = guhd
|
||||||
TEMPLATE = app
|
TEMPLATE = app
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user