Implement sensor Mandolyn, this closes #104
This commit is contained in:
parent
c030185438
commit
16a9b87fb6
4 changed files with 66 additions and 0 deletions
|
@ -44,6 +44,8 @@ SET( telldus-service_protocol_SRCS
|
|||
ProtocolHasta.cpp
|
||||
ProtocolIkea.h
|
||||
ProtocolIkea.cpp
|
||||
ProtocolMandolyn.h
|
||||
ProtocolMandolyn.cpp
|
||||
ProtocolNexa.h
|
||||
ProtocolNexa.cpp
|
||||
ProtocolOregon.h
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
#include "ProtocolGroup.h"
|
||||
#include "ProtocolHasta.h"
|
||||
#include "ProtocolIkea.h"
|
||||
#include "ProtocolMandolyn.h"
|
||||
#include "ProtocolNexa.h"
|
||||
#include "ProtocolOregon.h"
|
||||
#include "ProtocolRisingSun.h"
|
||||
|
@ -239,6 +240,12 @@ std::list<std::string> Protocol::decodeData(const std::string &fullData) {
|
|||
retval.push_back(decoded);
|
||||
}
|
||||
}
|
||||
else if(TelldusCore::comparei(dataMsg.protocol(), L"mandolyn") ) {
|
||||
decoded = ProtocolMandolyn::decodeData(dataMsg);
|
||||
if (decoded != "") {
|
||||
retval.push_back(decoded);
|
||||
}
|
||||
}
|
||||
else if(TelldusCore::comparei(dataMsg.protocol(), L"oregon") ) {
|
||||
decoded = ProtocolOregon::decodeData(dataMsg);
|
||||
if (decoded != "") {
|
||||
|
|
44
telldus-core/service/ProtocolMandolyn.cpp
Normal file
44
telldus-core/service/ProtocolMandolyn.cpp
Normal file
|
@ -0,0 +1,44 @@
|
|||
#include "ProtocolMandolyn.h"
|
||||
#include <stdlib.h>
|
||||
#include <sstream>
|
||||
#include <iomanip>
|
||||
|
||||
#ifdef _MSC_VER
|
||||
typedef unsigned __int8 uint8_t;
|
||||
typedef unsigned __int32 uint32_t;
|
||||
#else
|
||||
#include <stdint.h>
|
||||
#endif
|
||||
|
||||
std::string ProtocolMandolyn::decodeData(ControllerMessage &dataMsg)
|
||||
{
|
||||
std::string data = dataMsg.getParameter("data");
|
||||
uint32_t value = strtol(data.c_str(), NULL, 16);
|
||||
|
||||
bool parity = value & 0x1;
|
||||
value >>= 1;
|
||||
|
||||
double temp = (value & 0x7FFF) - 6400;
|
||||
temp = temp/128.0;
|
||||
value >>= 15;
|
||||
|
||||
uint8_t humidity = (value & 0x7F);
|
||||
value >>= 7;
|
||||
|
||||
bool battOk = value & 0x1;
|
||||
value >>= 3;
|
||||
|
||||
uint8_t channel = (value & 0x3)+1;
|
||||
value >>= 2;
|
||||
|
||||
uint8_t house = value & 0xF;
|
||||
|
||||
std::stringstream retString;
|
||||
retString << "class:sensor;protocol:mandolyn;id:"
|
||||
<< house*10+channel
|
||||
<< ";model:temperaturehumidity;"
|
||||
<< "temp:" << std::fixed << std::setprecision(1) << temp
|
||||
<< ";humidity:" << (int)humidity << ";";
|
||||
|
||||
return retString.str();
|
||||
}
|
13
telldus-core/service/ProtocolMandolyn.h
Normal file
13
telldus-core/service/ProtocolMandolyn.h
Normal file
|
@ -0,0 +1,13 @@
|
|||
#ifndef PROTOCOLMANDOLYN_H
|
||||
#define PROTOCOLMANDOLYN_H
|
||||
|
||||
#include "ControllerMessage.h"
|
||||
#include "Protocol.h"
|
||||
|
||||
class ProtocolMandolyn : public Protocol
|
||||
{
|
||||
public:
|
||||
static std::string decodeData(ControllerMessage &dataMsg);
|
||||
};
|
||||
|
||||
#endif //PROTOCOLMANDOLYN_H
|
Loading…
Add table
Add a link
Reference in a new issue