#include "devicepluginmeisteranker.h" #include "device.h" #include "devicemanager.h" #include "radio433.h" #include #include QUuid thermometer = QUuid("e37e9f34-95b9-4a22-ae4f-e8b874eec871"); DevicePluginMeisterAnker::DevicePluginMeisterAnker() { } QList DevicePluginMeisterAnker::supportedDevices() const { QList ret; // Thermometer DeviceClass deviceClassMeisterAnkerThermometer(pluginId(), thermometer); deviceClassMeisterAnkerThermometer.setName("Meister Anker Thermometer"); QVariantList thermometerParams; QVariantMap idParam; // id -> first 8 bits of codeword idParam.insert("name", "id"); idParam.insert("type", "string"); thermometerParams.append(idParam); deviceClassMeisterAnkerThermometer.setParams(thermometerParams); QList thermometerTriggers; QVariantList paramsThermometer; QVariantMap paramThermometer; paramThermometer.insert("name", "temperature"); paramThermometer.insert("type", "double"); paramsThermometer.append(paramThermometer); QVariantMap paramThermometerBat; paramThermometerBat.insert("name", "batterystatus"); paramThermometerBat.insert("type", "bool"); paramsThermometer.append(paramThermometerBat); TriggerType temperatureTrigger(QUuid("174ab4d5-2ef0-491b-a55b-c895cedff80e")); temperatureTrigger.setName("temperature"); temperatureTrigger.setParameters(paramsThermometer); thermometerTriggers.append(temperatureTrigger); // TODO: lock if we need a sync trigger // TriggerType syncTrigger(QUuid("174ab4d5-2ef0-491b-a55b-c895cedff80e")); // temperatureTrigger.setName("sync"); // temperatureTrigger.setParameters(paramsThermometer); // thermometerTriggers.append(temperatureTrigger); deviceClassMeisterAnkerThermometer.setTriggers(thermometerTriggers); ret.append(deviceClassMeisterAnkerThermometer); return ret; } DeviceManager::HardwareResource DevicePluginMeisterAnker::requiredHardware() const { return DeviceManager::HardwareResourceRadio433; } QString DevicePluginMeisterAnker::pluginName() const { return "Meister Anker"; } QUuid DevicePluginMeisterAnker::pluginId() const { return QUuid("993a7c86-e4b9-44aa-b61e-1f7165df1348"); } void DevicePluginMeisterAnker::executeAction(Device *device, const Action &action) { } void DevicePluginMeisterAnker::receiveData(QList rawData) { // filter right here a wrong signal length if(rawData.length() != 49){ return; } QList deviceList = deviceManager()->findConfiguredDevices(thermometer); if(deviceList.isEmpty()){ return; } int delay = rawData.first()/31; QByteArray binCode; if(delay > 250 && delay < 260){ // __ // | |________ = 0 1100000000 // __ // | |________________ = 1 110000000000000000 for(int i = 1; i <= 48; i+=2 ){ if(rawData.at(i) < 1000 && rawData.at(i+1) < 3000 && rawData.at(i+1) > 1000){ binCode.append('0'); }else if(rawData.at(i) < 1000 && rawData.at(i+1) > 3000){ binCode.append('1'); }else{ return; } } }else{ return; } // decode the signal QList byteList; for(int i = 4; i <= 24; i+=4){ byteList.append(binCode.left(4)); binCode = binCode.right(binCode.length() -4); } QByteArray temperatureBin(byteList.at(2) + byteList.at(3)); QByteArray batteryBin(byteList.at(4)); QByteArray temperatureTenthBin(byteList.at(5)); QByteArray idCode = binCode.left(8); // check if we have a sync signal (id = 11111111) if(idCode.contains("11111111")){ qDebug() << "temperatursensor sync signal"; } }