From a4b51ccdcc8b3f4b3834c22b2ac06936c538588f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Wed, 11 Feb 2015 15:15:17 +0100 Subject: [PATCH] first version of leynew plugin, rf part not working yet --- debian/guh-plugins.install | 2 + .../radio433/radio433brennenstuhlgateway.cpp | 2 +- plugins/deviceplugins/deviceplugins.pro | 1 + .../leynew/devicepluginleynew.cpp | 138 ++++++++++++++++++ .../deviceplugins/leynew/devicepluginleynew.h | 42 ++++++ .../leynew/devicepluginleynew.json | 127 ++++++++++++++++ plugins/deviceplugins/leynew/leynew.pro | 11 ++ 7 files changed, 322 insertions(+), 1 deletion(-) create mode 100644 plugins/deviceplugins/leynew/devicepluginleynew.cpp create mode 100644 plugins/deviceplugins/leynew/devicepluginleynew.h create mode 100644 plugins/deviceplugins/leynew/devicepluginleynew.json create mode 100644 plugins/deviceplugins/leynew/leynew.pro diff --git a/debian/guh-plugins.install b/debian/guh-plugins.install index 68ef0ccd..2641b04f 100644 --- a/debian/guh-plugins.install +++ b/debian/guh-plugins.install @@ -13,3 +13,5 @@ usr/lib/guh/plugins/libguh_devicepluginwifidetector.so usr/lib/guh/plugins/libguh_deviceplugindatetime.so usr/lib/guh/plugins/libguh_deviceplugingenericelements.so usr/lib/guh/plugins/libguh_deviceplugincommandlauncher.so +usr/lib/guh/plugins/libguh_devicepluginleynew.so + diff --git a/libguh/hardware/radio433/radio433brennenstuhlgateway.cpp b/libguh/hardware/radio433/radio433brennenstuhlgateway.cpp index 4df1424e..3fb42344 100644 --- a/libguh/hardware/radio433/radio433brennenstuhlgateway.cpp +++ b/libguh/hardware/radio433/radio433brennenstuhlgateway.cpp @@ -64,7 +64,7 @@ bool Radio433BrennenstuhlGateway::sendData(int delay, QList rawData) * ; | end of command */ - message.append("TXP:0,0,10,0," + QString::number(delay) + "," + QString::number(rawData.count()/2) + "," + data + ";"); + message.append("TXP:0,0,20,0," + QString::number(delay) + "," + QString::number(rawData.count()/2) + "," + data + ";"); if (m_gateway->writeDatagram(message, m_gatewayAddress, m_port) > 0) { m_available = true; diff --git a/plugins/deviceplugins/deviceplugins.pro b/plugins/deviceplugins/deviceplugins.pro index 368490f4..d1fa88ec 100644 --- a/plugins/deviceplugins/deviceplugins.pro +++ b/plugins/deviceplugins/deviceplugins.pro @@ -13,6 +13,7 @@ SUBDIRS += elro \ datetime \ genericelements \ commandlauncher \ + leynew \ diff --git a/plugins/deviceplugins/leynew/devicepluginleynew.cpp b/plugins/deviceplugins/leynew/devicepluginleynew.cpp new file mode 100644 index 00000000..dfa73997 --- /dev/null +++ b/plugins/deviceplugins/leynew/devicepluginleynew.cpp @@ -0,0 +1,138 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * * + * This file is part of guh. * + * * + * Guh is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, version 2 of the License. * + * * + * Guh is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with guh. If not, see . * + * * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +/*! + \page leynew.html + \title Leynew + + \ingroup plugins + \ingroup rf433 + + This plugin allows to controll RF 433 MHz actors an receive remote signals from \l{http://www.leynew.com/en/}{Leynew} + devices. + + Currently only following device is supported: + + \l{http://www.leynew.com/en/productview.asp?id=589}{http://www.leynew.com/en/productview.asp?id=589} + \l{http://image.en.09635.com/2012-8/15/RF-Controller-Aluminum-Version-LN-CON-RF20B-H-3CH-LV-316.jpg}{http://image.en.09635.com/2012-8/15/RF-Controller-Aluminum-Version-LN-CON-RF20B-H-3CH-LV-316.jpg} + + \chapter Plugin properties + Following JSON file contains the definition and the description of all available \l{DeviceClass}{DeviceClasses} + and \l{Vendor}{Vendors} of this \l{DevicePlugin}. + + Each \l{DeviceClass} has a list of \l{ParamType}{paramTypes}, \l{ActionType}{actionTypes}, \l{StateType}{stateTypes} + and \l{EventType}{eventTypes}. The \l{DeviceClass::CreateMethod}{createMethods} parameter describes how the \l{Device} + will be created in the system. A device can have more than one \l{DeviceClass::CreateMethod}{CreateMethod}. + The \l{DeviceClass::SetupMethod}{setupMethod} describes the setup method of the \l{Device}. + The detailed implementation of each \l{DeviceClass} can be found in the source code. + + \quotefile plugins/deviceplugins/elro/devicepluginleynew.json +*/ + +#include "devicepluginleynew.h" +#include "devicemanager.h" +#include "plugininfo.h" + +#include +#include + +DevicePluginLeynew::DevicePluginLeynew() +{ +} + +DeviceManager::DeviceSetupStatus DevicePluginLeynew::setupDevice(Device *device) +{ + Q_UNUSED(device); + + return DeviceManager::DeviceSetupStatusSuccess; +} + +DeviceManager::HardwareResources DevicePluginLeynew::requiredHardware() const +{ + return DeviceManager::HardwareResourceRadio433; +} + +DeviceManager::DeviceError DevicePluginLeynew::executeAction(Device *device, const Action &action) +{ + + if (device->deviceClassId() != rfControllerDeviceClassId) { + return DeviceManager::DeviceErrorDeviceClassNotFound; + } + + QList rawData; + QByteArray binCode; + + + // TODO: find out how ID will be calculated to bin code or make it discoverable + // ======================================= + // bincode depending on the ID + if (device->paramValue("ID") == "0115"){ + binCode.append("001101000001"); + } else if (device->paramValue("ID") == "0014") { + binCode.append("110000010101"); + } else { + return DeviceManager::DeviceErrorInvalidParameter; + } + + // ======================================= + // bincode depending on the action + + if (action.actionTypeId() == brightnessUpActionTypeId) { + binCode.append("000000000011"); + } else if (action.actionTypeId() == brightnessDownActionTypeId) { + binCode.append("000000001100"); + } if (action.actionTypeId() == powerActionTypeId) { + binCode.append("000011000000"); + } + + // ======================================= + //create rawData timings list + int delay = 200; + + // sync signal (starting with ON) + rawData.append(1); + rawData.append(10); + + // add the code + foreach (QChar c, binCode) { + if(c == '0'){ + // _ _ + // | |_ + rawData.append(2); + rawData.append(1); + }else{ + // _ + // | |_ _ + rawData.append(1); + rawData.append(2); + } + } + + qDebug() << binCode; + qDebug() << rawData; + + // ======================================= + // send data to hardware resource + if(transmitData(delay, rawData)){ + qDebug() << "transmitted" << pluginName() << device->name() << action.param("name").name(); + return DeviceManager::DeviceErrorNoError; + }else{ + qDebug() << "could not transmitt" << pluginName() << device->name() << action.param("name").name(); + return DeviceManager::DeviceErrorHardwareNotAvailable; + } +} diff --git a/plugins/deviceplugins/leynew/devicepluginleynew.h b/plugins/deviceplugins/leynew/devicepluginleynew.h new file mode 100644 index 00000000..66b8ece3 --- /dev/null +++ b/plugins/deviceplugins/leynew/devicepluginleynew.h @@ -0,0 +1,42 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * * + * This file is part of guh. * + * * + * Guh is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, version 2 of the License. * + * * + * Guh is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with guh. If not, see . * + * * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#ifndef DEVICEPLUGINLEYNEW_H +#define DEVICEPLUGINLEYNEW_H + +#include "plugin/deviceplugin.h" + +class DevicePluginLeynew : public DevicePlugin +{ + Q_OBJECT + + Q_PLUGIN_METADATA(IID "guru.guh.DevicePlugin" FILE "devicepluginleynew.json") + Q_INTERFACES(DevicePlugin) + +public: + explicit DevicePluginLeynew(); + + DeviceManager::DeviceSetupStatus setupDevice(Device *device) override; + DeviceManager::HardwareResources requiredHardware() const override; + +public slots: + DeviceManager::DeviceError executeAction(Device *device, const Action &action) override; + +}; + +#endif // DEVICEPLUGINLEYNEW_H diff --git a/plugins/deviceplugins/leynew/devicepluginleynew.json b/plugins/deviceplugins/leynew/devicepluginleynew.json new file mode 100644 index 00000000..44973841 --- /dev/null +++ b/plugins/deviceplugins/leynew/devicepluginleynew.json @@ -0,0 +1,127 @@ + { + "name": "Leynew", + "id": "9a6d23e6-fad8-4203-aeab-2e6e5c756990", + "vendors": [ + { + "name": "Leynew", + "id": "83c649b4-49b0-4482-9334-d86a85bfbd2a", + "deviceClasses": [ + { + "deviceClassId": "6b1f8f37-7eb4-46c4-9f15-a6eb4904999c", + "idName": "rfController", + "name": "RF Controller (LN-CON-RF20B)", + "createMethods": ["user"], + "paramTypes": [ + { + "name": "ID", + "type": "QString", + "allowedValues": ["0115", "0014"] + } + ], + "actionTypes": [ + { + "id": "18a30ff1-28d7-4cd0-8388-290db52cd48d", + "idName": "brightnessUp", + "name": "Brightness up" + }, + { + "id": "d1d251b6-ffe6-4b0c-bf03-bfa8947caa1d", + "idName": "brightnessDown", + "name": "Brightness down" + }, + { + "id": "b8b4ef78-126f-431b-b33f-742754da5af4", + "idName": "playPause", + "name": "Play / Pause" + }, + { + "id": "35495871-3b80-458b-b60d-5dc614c9fbf1", + "idName": "power", + "name": "Power" + }, + { + "id": "737f77b6-fe2a-45ad-9945-8f0197e57741", + "idName": "red", + "name": "Red" + }, + { + "id": "6471e804-fd54-41dd-88ed-ec46d6cc33db", + "idName": "green", + "name": "Green" + }, + { + "id": "3abfe3c4-f9b3-4b22-aa3a-86ef99adedbe", + "idName": "blue", + "name": "Blue" + }, + { + "id": "6a92d30d-7bce-4238-8e05-d25d3475699c", + "idName": "white", + "name": "White" + }, + { + "id": "10a145db-adea-4eff-921d-4ce1ceb940cd", + "idName": "orange", + "name": "Orange" + }, + { + "id": "46bbfb97-1600-4e91-930d-6ef4be7bdd9c", + "idName": "yellow", + "name": "Yellow" + }, + { + "id": "7e1db150-c68f-4c54-8259-61d050f31555", + "idName": "cyan", + "name": "Cyan" + }, + { + "id": "4008076e-ff8c-400b-8983-0a452ed66509", + "idName": "purple", + "name": "Purple" + }, + { + "id": "c692b7b0-f891-4729-8e76-4e67f1f6ff4a", + "idName": "auto", + "name": "Auto" + }, + { + "id": "14e696ef-6f9f-4095-9731-5f9e541dd416", + "idName": "jump3", + "name": "Jump 3" + }, + { + "id": "1e764e9f-5ff1-4cd1-b3a8-7feb2a3f204c", + "idName": "fade3", + "name": "Fade 3" + }, + { + "id": "85b37c46-a44c-4989-add2-06b5537fe1a1", + "idName": "speedUp", + "name": "Speed up" + }, + { + "id": "7fdb9f73-e773-4839-9137-3771feabe3e9", + "idName": "speedDown", + "name": "Speed down" + }, + { + "id": "851e024b-0eee-4eec-8261-478c28c03557", + "idName": "fade7", + "name": "Fade 7" + }, + { + "id": "c40392be-323d-48db-a076-40cf4d8cc7eb", + "idName": "jump7", + "name": "Jump 7" + }, + { + "id": "db700960-2b02-4ad3-8257-a28cb5fc6356", + "idName": "flash", + "name": "Flash" + } + ] + } + ] + } + ] +} diff --git a/plugins/deviceplugins/leynew/leynew.pro b/plugins/deviceplugins/leynew/leynew.pro new file mode 100644 index 00000000..5054427c --- /dev/null +++ b/plugins/deviceplugins/leynew/leynew.pro @@ -0,0 +1,11 @@ +include(../../plugins.pri) + +TARGET = $$qtLibraryTarget(guh_devicepluginleynew) + +SOURCES += \ + devicepluginleynew.cpp + +HEADERS += \ + devicepluginleynew.h + +