prepared everything for autocreate the slave devices of the cube...allmost all data are now decoded...

This commit is contained in:
Simon Stürz 2014-08-01 02:43:16 +02:00 committed by Michael Zanetti
parent f63e7885e0
commit b283725314
8 changed files with 841 additions and 354 deletions

View File

@ -10,7 +10,8 @@ SOURCES += \
maxcube.cpp \
maxdevice.cpp \
room.cpp \
livemessage.cpp
wallthermostat.cpp \
radiatorthermostat.cpp
HEADERS += \
deviceplugineq-3.h \
@ -18,5 +19,6 @@ HEADERS += \
maxcube.h \
maxdevice.h \
room.h \
livemessage.h
wallthermostat.h \
radiatorthermostat.h

View File

@ -26,6 +26,7 @@ MaxCube::MaxCube(QObject *parent, QString serialNumber, QHostAddress hostAdress,
connect(this,SIGNAL(connected()),this,SLOT(connected()));
connect(this,SIGNAL(disconnected()),this,SLOT(disconnected()));
connect(this,SIGNAL(readyRead()),this,SLOT(readData()));
connect(this,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(error(QAbstractSocket::SocketError)));
@ -82,26 +83,6 @@ void MaxCube::setPort(const quint16 &port)
m_port = port;
}
QByteArray MaxCube::httpConnectionId() const
{
return m_httpConnectionId;
}
void MaxCube::setHttpConnectionId(const QByteArray &httpConnectionId)
{
m_httpConnectionId = httpConnectionId;
}
int MaxCube::freeMemorySlots() const
{
return m_freeMemorySlots;
}
void MaxCube::setFreeMemorySlots(const int &freeMemorySlots)
{
m_freeMemorySlots = freeMemorySlots;
}
QDateTime MaxCube::cubeDateTime() const
{
return m_cubeDateTime;
@ -117,9 +98,14 @@ bool MaxCube::portalEnabeld() const
return m_portalEnabeld;
}
QList<MaxDevice *> MaxCube::deviceList()
QList<WallThermostat *> MaxCube::wallThermostatList()
{
return m_deviceList;
return m_wallThermostatList;
}
QList<RadiatorThermostat *> MaxCube::radiatorThermostatList()
{
return m_radiatorThermostatList;
}
QList<Room *> MaxCube::roomList()
@ -153,28 +139,25 @@ void MaxCube::decodeHelloMessage(QByteArray data)
m_rfAddress = list.at(1);
m_firmware = list.at(2).toInt();
qDebug() << "====================================================";
qDebug() << " HELLO message:";
qDebug() << "====================================================";
qDebug() << " serial number | " << list.at(0);
qDebug() << " RF address (hex) | " << list.at(1);
qDebug() << " firmware | " << QString::number(list.at(2).toInt());
qDebug() << " HTTP connection id | " << list.at(4);
qDebug() << " duty cycle (hex) | " << list.at(5);
qDebug() << " free memory slots (hex) | " << list.at(6);
qDebug() << " Cube date | " << m_cubeDateTime.date().toString("dd.MM.yyyy");
qDebug() << " Cube time | " << m_cubeDateTime.time().toString("HH:mm");
qDebug() << " State Cube Time | " << list.at(9);
qDebug() << " NTP counter | " << list.at(10);
// qDebug() << "====================================================";
// qDebug() << " HELLO message:";
// qDebug() << "====================================================";
// qDebug() << " serial number | " << m_serialNumber;
// qDebug() << " RF address (hex) | " << m_rfAddress;
// qDebug() << " firmware | " << m_firmware;
// qDebug() << " Cube date | " << m_cubeDateTime.date().toString("dd.MM.yyyy");
// qDebug() << " Cube time | " << m_cubeDateTime.time().toString("HH:mm");
// qDebug() << " State Cube Time | " << list.at(9);
// qDebug() << " NTP counter | " << list.at(10);
}
void MaxCube::decodeMetadataMessage(QByteArray data)
{
QList<QByteArray> list = data.left(data.length()-2).split(',');
QByteArray dataDecoded = QByteArray::fromBase64(list.at(2));
qDebug() << "====================================================";
qDebug() << " METADATA message:";
qDebug() << "====================================================";
// qDebug() << "====================================================";
// qDebug() << " METADATA message:";
// qDebug() << "====================================================";
// parse room list
int roomCount = dataDecoded.toHex().mid(4,2).toInt(0,16);
@ -191,58 +174,89 @@ void MaxCube::decodeMetadataMessage(QByteArray data)
m_roomList.append(room);
roomRawData = roomRawData.right(roomRawData.length() - ((roomNameLength*2) + 10));
}
qDebug() << "-------------------------|-------------------------";
qDebug() << "found " << m_roomList.count() << "rooms";
qDebug() << "-------------------------|-------------------------";
// qDebug() << "-------------------------|-------------------------";
// qDebug() << "found " << m_roomList.count() << "rooms";
// qDebug() << "-------------------------|-------------------------";
foreach (Room *room, m_roomList) {
qDebug() << " Room Name | " << room->roomName();
qDebug() << " Room ID | " << room->roomId();
qDebug() << " Group RF Address | " << room->groupRfAddress();
qDebug() << "-------------------------|-------------------------";
}
// foreach (Room *room, m_roomList) {
// qDebug() << " Room Name | " << room->roomName();
// qDebug() << " Room ID | " << room->roomId();
// qDebug() << " Group RF Address | " << room->groupRfAddress();
// qDebug() << "-------------------------|-------------------------";
// }
// parse device list
int deviceCount = roomRawData.left(2).toInt(0,16);
QByteArray deviceRawData = roomRawData.right(roomRawData.length() - 2);
// qDebug() << "-------------------------|-------------------------";
// qDebug() << "found " << deviceCount << "devices";
// qDebug() << "-------------------------|-------------------------";
for(int i = 0; i < deviceCount; i++){
MaxDevice* device = new MaxDevice(this);
device->setDeviceType(deviceRawData.left(2).toInt(0,16));
device->setRfAddress(deviceRawData.mid(2,6));
device->setSerialNumber(QByteArray::fromHex(deviceRawData.mid(8,20)));
int deviceNameLenght = deviceRawData.mid(28,2).toInt(0,16);
device->setDeviceName(QByteArray::fromHex(deviceRawData.mid(30,deviceNameLenght*2)));
device->setRoomId(deviceRawData.mid(30 + deviceNameLenght*2,2).toInt(0,16));
int deviceType = deviceRawData.left(2).toInt(0,16);
switch (deviceType) {
case MaxDevice::DeviceRadiatorThermostat:{
RadiatorThermostat* device = new RadiatorThermostat(this);
device->setDeviceType(deviceType);
device->setRfAddress(deviceRawData.mid(2,6));
device->setSerialNumber(QByteArray::fromHex(deviceRawData.mid(8,20)));
int deviceNameLenght = deviceRawData.mid(28,2).toInt(0,16);
device->setDeviceName(QByteArray::fromHex(deviceRawData.mid(30,deviceNameLenght*2)));
device->setRoomId(deviceRawData.mid(30 + deviceNameLenght*2,2).toInt(0,16));
deviceRawData = deviceRawData.right(deviceRawData.length() - (32 + deviceNameLenght*2));
deviceRawData = deviceRawData.right(deviceRawData.length() - (32 + deviceNameLenght*2));
m_deviceList.append(device);
}
qDebug() << "-------------------------|-------------------------";
qDebug() << "found " << m_deviceList.count() << "devices";
qDebug() << "-------------------------|-------------------------";
foreach (MaxDevice *device, m_deviceList) {
qDebug() << " Device Name | " << device->deviceName();
qDebug() << " Serial Number| " << device->serialNumber();
qDebug() << " Device Type String | " << device->deviceTypeString();
qDebug() << " RF address (hex) | " << device->rfAddress();
qDebug() << " Room ID | " << device->roomId();
qDebug() << "-------------------------|-------------------------";
}
// set room data for each device
foreach (MaxDevice *device, m_deviceList) {
foreach (Room * room, m_roomList) {
if(device->roomId() == room->roomId()){
device->setRoomName(room->roomName());
// set room data for each device
foreach (Room * room, m_roomList) {
if(device->roomId() == room->roomId()){
device->setRoomName(room->roomName());
}
}
m_radiatorThermostatList.append(device);
// qDebug() << " Device Name | " << device->deviceName();
// qDebug() << " Serial Number| " << device->serialNumber();
// qDebug() << " Device Type String | " << device->deviceTypeString();
// qDebug() << " RF address (hex) | " << device->rfAddress();
// qDebug() << " Room ID | " << device->roomId();
// qDebug() << " Room Name | " << device->roomName();
// qDebug() << "-------------------------|-------------------------";
break;
}
case MaxDevice::DeviceWallThermostat:{
WallThermostat* device = new WallThermostat(this);
device->setDeviceType(deviceType);
device->setRfAddress(deviceRawData.mid(2,6));
device->setSerialNumber(QByteArray::fromHex(deviceRawData.mid(8,20)));
int deviceNameLenght = deviceRawData.mid(28,2).toInt(0,16);
device->setDeviceName(QByteArray::fromHex(deviceRawData.mid(30,deviceNameLenght*2)));
device->setRoomId(deviceRawData.mid(30 + deviceNameLenght*2,2).toInt(0,16));
deviceRawData = deviceRawData.right(deviceRawData.length() - (32 + deviceNameLenght*2));
// set room data for each device
foreach (Room * room, m_roomList) {
if(device->roomId() == room->roomId()){
device->setRoomName(room->roomName());
}
}
m_wallThermostatList.append(device);
// qDebug() << " Device Name | " << device->deviceName();
// qDebug() << " Serial Number| " << device->serialNumber();
// qDebug() << " Device Type String | " << device->deviceTypeString();
// qDebug() << " RF address (hex) | " << device->rfAddress();
// qDebug() << " Room ID | " << device->roomId();
// qDebug() << " Room Name | " << device->roomName();
// qDebug() << "-------------------------|-------------------------";
break;
}
default:
break;
}
}
emit deviceListReady(m_deviceList);
m_cubeInitialized = true;
emit deviceListsReady();
}
void MaxCube::decodeConfigMessage(QByteArray data)
@ -253,7 +267,7 @@ void MaxCube::decodeConfigMessage(QByteArray data)
}
QByteArray rfAddress = list.at(0);
QByteArray dataRaw = QByteArray::fromBase64(list.at(1)).toHex();
int lengthData = dataRaw.left(2).toInt(0,16);
//int lengthData = dataRaw.left(2).toInt(0,16);
if(rfAddress != dataRaw.mid(2,6)){
qDebug() << "ERROR: rf addresses not equal!";
}
@ -261,88 +275,95 @@ void MaxCube::decodeConfigMessage(QByteArray data)
//QByteArray unknown = dataRaw.mid(12,6);
QByteArray serialNumber = QByteArray::fromHex(dataRaw.mid(16,20));
qDebug() << "====================================================";
qDebug() << " CONFIG message:";
qDebug() << "====================================================";
qDebug() << " Serial Number | " << serialNumber;
qDebug() << " device Type | " << deviceTypeString(deviceType);
qDebug() << " RF address (hex) | " << rfAddress;
qDebug() << " data length | " << lengthData;
qDebug() << "-------------------------|-------------------------";
// qDebug() << "====================================================";
// qDebug() << " CONFIG message:";
// qDebug() << "====================================================";
// qDebug() << " Serial Number | " << serialNumber;
// qDebug() << " device Type | " << deviceTypeString(deviceType);
// qDebug() << " RF address (hex) | " << rfAddress;
// qDebug() << " data length | " << lengthData;
// qDebug() << "-------------------------|-------------------------";
switch (deviceType) {
case MaxDevice::DeviceCube:{
m_portalEnabeld = (bool)dataRaw.mid(36,2).toInt(0,16);
qDebug() << " portal enabled | " << m_portalEnabeld;
qDebug() << " portal URL | " << QString(QByteArray::fromHex(dataRaw.mid(170,68)));
qDebug() << " time zone | " << QString(QByteArray::fromHex(dataRaw.mid(428,6)));
qDebug() << " summer/winter time | " << QString(QByteArray::fromHex(dataRaw.mid(452,8)));
// qDebug() << " portal enabled | " << m_portalEnabeld;
// qDebug() << " portal URL | " << QString(QByteArray::fromHex(dataRaw.mid(170,68)));
// qDebug() << " time zone | " << QString(QByteArray::fromHex(dataRaw.mid(428,6)));
// qDebug() << " summer/winter time | " << QString(QByteArray::fromHex(dataRaw.mid(452,8)));
emit cubeConfigReady();
break;
}
case MaxDevice::DeviceRadiatorThermostat:{
int roomId = dataRaw.mid(10,2).toInt(0,16);
int firmware = dataRaw.mid(12,2).toInt(0,16);
double confortTemp = (double)dataRaw.mid(36,2).toInt(0,16) / 2.0;
double ecoTemp = (double)dataRaw.mid(38,2).toInt(0,16) / 2.0;
double maxSetPointTemp = (double)dataRaw.mid(40,2).toInt(0,16) / 2.0;
double minSetPointTemp = (double)dataRaw.mid(42,2).toInt(0,16) / 2.0;
double offsetTemp = (double)(dataRaw.mid(44,2).toInt(0,16) / 2.0 ) - 3.5;
double windowOpenTemp = (double)dataRaw.mid(46,2).toInt(0,16)/2.0;
int windowOpenDuration = dataRaw.mid(48,2).toInt(0,16);
// boost code
QByteArray boostDurationCode = fillBin(QByteArray::number(dataRaw.mid(50,2).toInt(0,16),2),8);
int boostDuration = boostDurationCode.left(3).toInt(0,2) * 5;
int valveValue = boostDurationCode.right(5).toInt(0,2) * 5;
foreach (RadiatorThermostat* device, m_radiatorThermostatList) {
if(device->rfAddress() == rfAddress){
// day of week an time
QByteArray dowTime = fillBin(QByteArray::number(dataRaw.mid(52,2).toInt(0,16),2),8);
QString weekDay = weekDayString(dowTime.left(3).toInt(0,2));
QTime time = QTime(dowTime.right(5).toInt(0,2),0);
//int roomId = dataRaw.mid(10,2).toInt(0,16);
//int firmware = dataRaw.mid(12,2).toInt(0,16);
device->setConfortTemp((double)dataRaw.mid(36,2).toInt(0,16) / 2.0);
device->setEcoTemp((double)dataRaw.mid(38,2).toInt(0,16) / 2.0);
device->setMaxSetPointTemp((double)dataRaw.mid(40,2).toInt(0,16) / 2.0);
device->setMinSetPointTemp((double)dataRaw.mid(42,2).toInt(0,16) / 2.0);
device->setOffsetTemp((double)(dataRaw.mid(44,2).toInt(0,16) / 2.0 ) - 3.5);
device->setWindowOpenTemp((double)dataRaw.mid(46,2).toInt(0,16)/2.0);
device->setWindowOpenDuration(dataRaw.mid(48,2).toInt(0,16));
// boost code
QByteArray boostDurationCode = fillBin(QByteArray::number(dataRaw.mid(50,2).toInt(0,16),2),8);
device->setBoostDuration(boostDurationCode.left(3).toInt(0,2) * 5);
device->setBoostValveValue(boostDurationCode.right(5).toInt(0,2) * 5);
double valveMaximumSettings = (double)dataRaw.mid(54,2).toInt(0,16)*(double)100.0/255.0;
double valveOffset = (double)dataRaw.mid(56,2).toInt(0,16)*100.0/255.0;
// day of week an time
QByteArray dowTime = fillBin(QByteArray::number(dataRaw.mid(52,2).toInt(0,16),2),8);
device->setDiscalcingWeekDay(weekDayString(dowTime.left(3).toInt(0,2)));
device->setDiscalcingTime(QTime(dowTime.right(5).toInt(0,2),0));
qDebug() << " Room ID | " << roomId;
qDebug() << " firmware | " << firmware;
qDebug() << " Confort Temp. | " << confortTemp << "C";
qDebug() << " Eco Temp. | " << ecoTemp << "C";
qDebug() << " Max. Set Point Temp. | " << maxSetPointTemp << "C";
qDebug() << " Min. Set Point Temp. | " << minSetPointTemp << "C";
qDebug() << " Temp. Offset | " << offsetTemp << "C";
qDebug() << " Window Open Temp. | " << windowOpenTemp << "C";
qDebug() << " Window Open Duration | " << windowOpenDuration << "min";
qDebug() << " Boost code | " << boostDurationCode;
qDebug() << " Boost Duration | " << boostDuration << "min";
qDebug() << " Valve value | " << valveValue << "%";
qDebug() << " dow code | " << dowTime;
qDebug() << " disclaiming run day | " << weekDay;
qDebug() << " disclaiming run time | " << time.toString("HH:mm");
qDebug() << " Valve Maximum Settings | " << valveMaximumSettings << "%";
qDebug() << " Valve Offset | " << valveOffset << "%";
parseWeeklyProgram(dataRaw.right(dataRaw.length() - 58));
device->setValveMaximumSettings((double)dataRaw.mid(54,2).toInt(0,16)*(double)100.0/255.0);
device->setValveOffset((double)dataRaw.mid(56,2).toInt(0,16)*100.0/255.0);
// qDebug() << " Room ID | " << device->roomId();
// qDebug() << " firmware | " << firmware;
// qDebug() << " Confort Temp. | " << device->confortTemp() << "C";
// qDebug() << " Eco Temp. | " << device->ecoTemp() << "C";
// qDebug() << " Max. Set Point Temp. | " << device->maxSetPointTemp() << "C";
// qDebug() << " Min. Set Point Temp. | " << device->minSetPointTemp() << "C";
// qDebug() << " Temp. Offset | " << device->offsetTemp() << "C";
// qDebug() << " Window Open Temp. | " << device->windowOpenTemp() << "C";
// qDebug() << " Window Open Duration | " << device->windowOpenDuration() << "min";
// qDebug() << " Boost Duration | " << device->boostDuration() << "min";
// qDebug() << " Valve value | " << device->boostValveValue() << "%";
// qDebug() << " disclaiming run day | " << device->discalcingWeekDay();
// qDebug() << " disclaiming run time | " << device->discalcingTime().toString("HH:mm");
// qDebug() << " Valve Maximum Settings | " << device->valveMaximumSettings() << "%";
// qDebug() << " Valve Offset | " << device->valveOffset() << "%";
parseWeeklyProgram(dataRaw.right(dataRaw.length() - 58));
}
}
break;
}
case MaxDevice::DeviceRadiatorThermostatPlus:
break;
case MaxDevice::DeviceWallThermostat:{
int roomId = dataRaw.mid(10,2).toInt(0,16);
int firmware = dataRaw.mid(12,2).toInt(0,16);
double confortTemp = (double)dataRaw.mid(36,2).toInt(0,16) / 2.0;
double ecoTemp = (double)dataRaw.mid(38,2).toInt(0,16)/2.0;
double maxSetPointTemp = (double)dataRaw.mid(40,2).toInt(0,16)/2.0;
double minSetPointTemp = (double)dataRaw.mid(42,2).toInt(0,16)/2.0;
foreach (WallThermostat* device, m_wallThermostatList) {
if(device->rfAddress() == rfAddress){
//int roomId = dataRaw.mid(10,2).toInt(0,16);
//int firmware = dataRaw.mid(12,2).toInt(0,16);
device->setConfortTemp((double)dataRaw.mid(36,2).toInt(0,16) / 2.0);
device->setEcoTemp((double)dataRaw.mid(38,2).toInt(0,16)/2.0);
device->setMaxSetPointTemp((double)dataRaw.mid(40,2).toInt(0,16)/2.0);
device->setMinSetPointTemp((double)dataRaw.mid(42,2).toInt(0,16)/2.0);
qDebug() << " Room ID | " << roomId;
qDebug() << " firmware | " << firmware;
qDebug() << " Confort Temp. | " << confortTemp;
qDebug() << " Eco Temp. | " << ecoTemp;
qDebug() << " Max. Set Point Temp. | " << maxSetPointTemp;
qDebug() << " Min. Set Point Temp. | " << minSetPointTemp;
// qDebug() << " Room ID | " << device->roomId();
// qDebug() << " firmware | " << firmware;
// qDebug() << " Confort Temp. | " << device->confortTemp();
// qDebug() << " Eco Temp. | " << device->ecoTemp();
// qDebug() << " Max. Set Point Temp. | " << device->maxSetPointTemp();
// qDebug() << " Min. Set Point Temp. | " << device->minSetPointTemp();
parseWeeklyProgram(dataRaw.right(dataRaw.length() - 44));
parseWeeklyProgram(dataRaw.right(dataRaw.length() - 44));
}
}
break;
}
case MaxDevice::DeviceEcoButton:
@ -357,136 +378,121 @@ void MaxCube::decodeConfigMessage(QByteArray data)
void MaxCube::decodeDevicelistMessage(QByteArray data)
{
qDebug() << "====================================================";
qDebug() << " LIVE message:";
qDebug() << "====================================================";
//qDebug() << data;
QByteArray rawDataAll = QByteArray::fromBase64(data).toHex();
qDebug() << rawDataAll;
// qDebug() << "====================================================";
// qDebug() << " LIVE message:";
// qDebug() << "====================================================";
QByteArray rawDataAll = QByteArray::fromBase64(data).toHex();
QList<QByteArray> deviceMessageList = splitMessage(rawDataAll);
foreach (QByteArray rawData, deviceMessageList) {
LiveMessage message;
message.setRfAddress(rawData.mid(0,6));
QByteArray rfAddress = rawData.mid(0,6);
int deviceType = deviceTypeFromRFAddress(rfAddress);
MaxDevice *device = getDeviceTypeFromRFAddress(message.rfAddress());
switch (device->deviceType()) {
switch (deviceType) {
case MaxDevice::DeviceWallThermostat:{
QByteArray unknown = rawData.mid(6,2);
foreach (WallThermostat* device, m_wallThermostatList) {
if(device->rfAddress() == rfAddress){
QByteArray initCode = fillBin(QByteArray::number(rawData.mid(8,2).toInt(0,16),2),8);
message.setInformationValid((bool)initCode.mid(3,1).toInt());
message.setErrorOccured((bool)initCode.mid(4,1).toInt());
message.setIsAnswereToCommand((bool)initCode.mid(5,1).toInt());
message.setInitialized((bool)initCode.mid(6,1).toInt());
// init/valid code
QByteArray initCode = fillBin(QByteArray::number(rawData.mid(8,2).toInt(0,16),2),8);
device->setInformationValid((bool)initCode.mid(3,1).toInt());
device->setErrorOccured((bool)initCode.mid(4,1).toInt());
device->setIsAnswereToCommand((bool)initCode.mid(5,1).toInt());
device->setInitialized((bool)initCode.mid(6,1).toInt());
QByteArray statusCode = fillBin(QByteArray::number(rawData.mid(10,2).toInt(0,16),2),8);
message.setBatteryLow((bool)statusCode.mid(0,1).toInt());
message.setLinkStatusOK(!(bool)statusCode.mid(1,1).toInt());
message.setPanelLocked((bool)statusCode.mid(2,1).toInt());
message.setGatewayKnown((bool)statusCode.mid(3,1).toInt());
message.setDtsActive((bool)statusCode.mid(4,1).toInt());
message.setDeviceMode(statusCode.right(2).toInt(0,2));
// status code
QByteArray statusCode = fillBin(QByteArray::number(rawData.mid(10,2).toInt(0,16),2),8);
device->setBatteryLow((bool)statusCode.mid(0,1).toInt());
device->setLinkStatusOK(!(bool)statusCode.mid(1,1).toInt());
device->setPanelLocked((bool)statusCode.mid(2,1).toInt());
device->setGatewayKnown((bool)statusCode.mid(3,1).toInt());
device->setDtsActive((bool)statusCode.mid(4,1).toInt());
device->setDeviceMode(statusCode.right(2).toInt(0,2));
message.setValvePosition((double)rawData.mid(12,2).toInt(0,16));
// calculate current temperature and setpoint temperature
QByteArray tempCode = fillBin(QByteArray::number(rawData.mid(14,2).toInt(0,16),2),8);
device->setSetpointTemperatre((double)tempCode.right(6).toInt(0,2) / 2.0);
if(tempCode.left(2) == "10"){
device->setCurrentTemperatre(((double)rawData.right(2).toInt(0,16) / 10.0) + 25.6);
}else{
device->setCurrentTemperatre((double)rawData.right(2).toInt(0,16) / 10.0);
}
// calculate current temperature and setpoint temperature
// 00 00 00 00
// 10
QByteArray tempCode = fillBin(QByteArray::number(rawData.mid(14,2).toInt(0,16),2),8);
message.setSetpointTemperatre((double)tempCode.right(6).toInt(0,2) / 2.0);
double currentTemperature;
if(tempCode.left(2) == "10"){
currentTemperature = ((double)rawData.right(2).toInt(0,16) / 10.0) + 25.6;
}else{
currentTemperature = (double)rawData.right(2).toInt(0,16) / 10.0;
// qDebug() << " raw data | " << rawData;
// qDebug() << " device type | " << device->deviceTypeString();
// qDebug() << " device name | " << device->deviceName();
// qDebug() << " RF address (hex) | " << device->rfAddress();
// qDebug() << " initCode | " << initCode;
// qDebug() << " information valid | " << device->informationValid();
// qDebug() << " error occured | " << device->errorOccured();
// qDebug() << " is answere to a command | " << device->isAnswereToCommand();
// qDebug() << " initialized | " << device->initialized();
// qDebug() << " battery low | " << device->batteryLow();
// qDebug() << " link status OK | " << device->linkStatusOK();
// qDebug() << " panel locked | " << device->panelLocked();
// qDebug() << " gateway known | " << device->gatewayKnown();
// qDebug() << " DST settings active | " << device->dtsActive();
// qDebug() << " device mode | " << device->deviceModeString();
// qDebug() << " Temperatur Setpoint | " << device->setpointTemperature();
// qDebug() << " Current Temp | " << device->currentTemperature();
// qDebug() << "-------------------------|-------------------------";
}
}
qDebug() << " raw data | " << rawData;
qDebug() << " device type | " << device->deviceTypeString();
qDebug() << " device name | " << device->deviceName();
qDebug() << " RF address (hex) | " << message.rfAddress();
qDebug() << " unknown | " << unknown;
qDebug() << " initCode | " << initCode;
qDebug() << " information valid | " << message.informationValid();
qDebug() << " error occured | " << message.errorOccured();
qDebug() << " is answere to a command | " << message.isAnswereToCommand();
qDebug() << " initialized | " << message.initialized();
qDebug() << " statusCode | " << statusCode;
qDebug() << " battery low | " << message.batteryLow();
qDebug() << " link status OK | " << message.linkStatusOK();
qDebug() << " panel locked | " << message.panelLocked();
qDebug() << " gateway known | " << message.gatewayKnown();
qDebug() << " DST settings active | " << message.dtsActive();
qDebug() << " device mode | " << message.deviceModeString();
qDebug() << " temp Code | " << tempCode;
qDebug() << " Temperatur Setpoint | " << message.setpointTemperature();
qDebug() << " Current Temp | " << currentTemperature;
qDebug() << " unknown | " << rawData.right(rawData.length() - 12);
qDebug() << "-------------------------|-------------------------";
emit liveMessageReady(message);
break;
}
case MaxDevice::DeviceRadiatorThermostat:{
QByteArray unknown = rawData.mid(6,2);
foreach (RadiatorThermostat* device, m_radiatorThermostatList) {
if(device->rfAddress() == rfAddress){
QByteArray initCode = fillBin(QByteArray::number(rawData.mid(8,2).toInt(0,16),2),8);
message.setInformationValid((bool)initCode.mid(3,1).toInt());
message.setErrorOccured((bool)initCode.mid(4,1).toInt());
message.setIsAnswereToCommand((bool)initCode.mid(5,1).toInt());
message.setInitialized((bool)initCode.mid(6,1).toInt());
QByteArray initCode = fillBin(QByteArray::number(rawData.mid(8,2).toInt(0,16),2),8);
device->setInformationValid((bool)initCode.mid(3,1).toInt());
device->setErrorOccured((bool)initCode.mid(4,1).toInt());
device->setIsAnswereToCommand((bool)initCode.mid(5,1).toInt());
device->setInitialized((bool)initCode.mid(6,1).toInt());
QByteArray statusCode = fillBin(QByteArray::number(rawData.mid(10,2).toInt(0,16),2),8);
message.setBatteryLow((bool)statusCode.mid(0,1).toInt());
message.setLinkStatusOK(!(bool)statusCode.mid(1,1).toInt());
message.setPanelLocked((bool)statusCode.mid(2,1).toInt());
message.setGatewayKnown((bool)statusCode.mid(3,1).toInt());
message.setDtsActive((bool)statusCode.mid(4,1).toInt());
message.setDeviceMode(statusCode.right(2).toInt(0,2));
QByteArray statusCode = fillBin(QByteArray::number(rawData.mid(10,2).toInt(0,16),2),8);
device->setBatteryLow((bool)statusCode.mid(0,1).toInt());
device->setLinkStatusOK(!(bool)statusCode.mid(1,1).toInt());
device->setPanelLocked((bool)statusCode.mid(2,1).toInt());
device->setGatewayKnown((bool)statusCode.mid(3,1).toInt());
device->setDtsActive((bool)statusCode.mid(4,1).toInt());
device->setDeviceMode(statusCode.right(2).toInt(0,2));
message.setValvePosition((double)rawData.mid(12,2).toInt(0,16));
message.setSetpointTemperatre((double)rawData.mid(14,2).toInt(0,16)/ 2.0);
message.setDateTime(calculateDateTime(rawData.mid(18,4), rawData.mid(22,2)));
device->setValvePosition((double)rawData.mid(12,2).toInt(0,16));
device->setSetpointTemperatre((double)rawData.mid(14,2).toInt(0,16)/ 2.0);
qDebug() << " raw data | " << rawData;
qDebug() << " device type | " << device->deviceTypeString();
qDebug() << " device name | " << device->deviceName();
qDebug() << " RF address (hex) | " << message.rfAddress();
qDebug() << " unknown | " << unknown;
qDebug() << " information valid | " << message.informationValid();
qDebug() << " error occured | " << message.errorOccured();
qDebug() << " is answere to a command | " << message.isAnswereToCommand();
qDebug() << " initialized | " << message.initialized();
qDebug() << " battery low | " << message.batteryLow();
qDebug() << " link status OK | " << message.linkStatusOK();
qDebug() << " panel locked | " << message.panelLocked();
qDebug() << " gateway known | " << message.gatewayKnown();
qDebug() << " DST settings active | " << message.dtsActive();
qDebug() << " device mode | " << message.deviceModeString();
qDebug() << " valve position | " << message.valvePosition() << "%";
qDebug() << " Temperatur Setpoint | " << message.setpointTemperature() << " deg C";
qDebug() << " unknown | " << rawData.right(rawData.length() - 12);
qDebug() << "-------------------------|-------------------------";
emit liveMessageReady(message);
// qDebug() << " device type | " << device->deviceTypeString();
// qDebug() << " device name | " << device->deviceName();
// qDebug() << " RF address (hex) | " << device->rfAddress();
// qDebug() << " information valid | " << device->informationValid();
// qDebug() << " error occured | " << device->errorOccured();
// qDebug() << " is answere to a command | " << device->isAnswereToCommand();
// qDebug() << " initialized | " << device->initialized();
// qDebug() << " battery low | " << device->batteryLow();
// qDebug() << " link status OK | " << device->linkStatusOK();
// qDebug() << " panel locked | " << device->panelLocked();
// qDebug() << " gateway known | " << device->gatewayKnown();
// qDebug() << " DST settings active | " << device->dtsActive();
// qDebug() << " device mode | " << device->deviceModeString();
// qDebug() << " valve position | " << device->valvePosition() << "%";
// qDebug() << " Temperatur Setpoint | " << device->setpointTemperature() << " deg C";
// qDebug() << "-------------------------|-------------------------";
}
}
break;
}
case MaxDevice::DeviceWindowContact:{
QByteArray windowOpenRawData = fillBin(QByteArray::number(rawData.mid(10,2).toInt(0,16),2),8);
bool windowOpen = (bool)windowOpenRawData.mid(5,1).toInt();
//bool windowOpen = (bool)windowOpenRawData.mid(5,1).toInt();
qDebug() << " raw data | " << rawData;
qDebug() << " device type | " << device->deviceTypeString();
qDebug() << " device name | " << device->deviceName();
qDebug() << " RF address (hex) | " << message.rfAddress();
qDebug() << " window open code | " << windowOpenRawData;
qDebug() << " window open | " << windowOpen;
// qDebug() << " raw data | " << rawData;
// qDebug() << " device type name | " << "Window Contact";
// qDebug() << " RF address (hex) | " << rfAddress;
// qDebug() << " window open code | " << windowOpenRawData;
// qDebug() << " window open | " << windowOpen;
// qDebug() << "-------------------------|-------------------------";
break;
}
default:
@ -502,18 +508,16 @@ void MaxCube::parseWeeklyProgram(QByteArray data)
//qDebug() << weekDayString(i);
for(int i = 0; i < 52; i+=4){
QByteArray element = fillBin(QByteArray::number(dayData.mid(i,4).toInt(0,16),2),16);
int minutes = element.right(9).toInt(0,2) * 5;
int hours = (minutes / 60) % 24;
minutes = minutes % 60;
QTime time = QTime(hours,minutes);
//int minutes = element.right(9).toInt(0,2) * 5;
//int hours = (minutes / 60) % 24;
//minutes = minutes % 60;
//QTime time = QTime(hours,minutes);
//qDebug() << (double)element.left(7).toInt(0,2) / 2 << "\t" << "deg. until" << "\t" << time.toString("HH:mm");
}
data = data.right(data.length() - 52);
}
if(!data.isEmpty()){
qDebug() << " ? | " << data;
//qDebug() << " ? | " << data;
}
}
@ -523,10 +527,10 @@ void MaxCube::decodeNewDeviceFoundMessage(QByteArray data)
return;
}
qDebug() << "====================================================";
qDebug() << " NEW DEVICE message:";
qDebug() << "====================================================";
qDebug() << " Serial Number | " << QByteArray::fromBase64(data);
// qDebug() << "====================================================";
// qDebug() << " NEW DEVICE message:";
// qDebug() << "====================================================";
// qDebug() << " Serial Number | " << QByteArray::fromBase64(data);
}
@ -623,31 +627,41 @@ QList<QByteArray> MaxCube::splitMessage(QByteArray data)
messageList.append(data.mid(2,length));
data = data.right(data.length() - (length+2));
}
qDebug() << messageList;
//qDebug() << messageList;
return messageList;
}
MaxDevice *MaxCube::getDeviceTypeFromRFAddress(QByteArray rfAddress)
int MaxCube::deviceTypeFromRFAddress(QByteArray rfAddress)
{
foreach (MaxDevice *device, m_deviceList){
foreach (WallThermostat* device, m_wallThermostatList) {
if(device->rfAddress() == rfAddress){
return device;
return device->deviceType();
}
}
return NULL;
foreach (RadiatorThermostat* device, m_radiatorThermostatList) {
if(device->rfAddress() == rfAddress){
return device->deviceType();
}
}
return -1;
}
void MaxCube::connected()
void MaxCube::connectionStateChanged(const QAbstractSocket::SocketState &socketState)
{
qDebug() << "-> connected to cube " << m_serialNumber << m_hostAddress.toString();
emit cubeConnectionStatusChanged(true);
}
void MaxCube::disconnected()
{
m_cubeInitialized = false;
qDebug() << "-> disconnected from cube " << m_serialNumber << m_hostAddress.toString();
emit cubeConnectionStatusChanged(false);
switch (socketState) {
case QAbstractSocket::ConnectedState:
qDebug() << "-> connected to cube " << m_serialNumber << m_hostAddress.toString();
emit cubeConnectionStatusChanged(true);
break;
case QAbstractSocket::UnconnectedState:
m_cubeInitialized = false;
qDebug() << "-> disconnected from cube " << m_serialNumber << m_hostAddress.toString();
emit cubeConnectionStatusChanged(false);
break;
default:
break;
}
}
void MaxCube::error(QAbstractSocket::SocketError error)

View File

@ -26,7 +26,8 @@
#include "maxdevice.h"
#include "room.h"
#include "livemessage.h"
#include "wallthermostat.h"
#include "radiatorthermostat.h"
class MaxCube : public QTcpSocket
{
@ -60,18 +61,14 @@ public:
quint16 port() const;
void setPort(const quint16 &port);
QByteArray httpConnectionId() const;
void setHttpConnectionId(const QByteArray &httpConnectionId);
int freeMemorySlots() const;
void setFreeMemorySlots(const int &freeMemorySlots);
QDateTime cubeDateTime() const;
void setCubeDateTime(const QDateTime &cubeDateTime);
bool portalEnabeld() const;
QList<MaxDevice*> deviceList();
QList<WallThermostat*> wallThermostatList();
QList<RadiatorThermostat*> radiatorThermostatList();
QList<Room*> roomList();
void connectToCube();
@ -86,13 +83,12 @@ private:
int m_firmware;
QHostAddress m_hostAddress;
quint16 m_port;
QByteArray m_httpConnectionId;
int m_freeMemorySlots;
QDateTime m_cubeDateTime;
bool m_portalEnabeld;
QList<Room*> m_roomList;
QList<MaxDevice*> m_deviceList;
QList<WallThermostat*> m_wallThermostatList;
QList<RadiatorThermostat*> m_radiatorThermostatList;
bool m_cubeInitialized;
@ -109,18 +105,21 @@ private:
QByteArray fillBin(QByteArray data, int dataLength);
QList<QByteArray> splitMessage(QByteArray data);
MaxDevice *getDeviceTypeFromRFAddress(QByteArray rfAddress);
int deviceTypeFromRFAddress(QByteArray rfAddress);
signals:
void cubeDataAvailable(const QByteArray &data);
void cubeACK();
void cubeConnectionStatusChanged(const bool &connected);
void deviceListReady(QList<MaxDevice*> maxDeviceList);
void liveMessageReady(const LiveMessage &liveMessage);
// when things are parsed
void deviceListsReady();
void cubeConfigReady();
void wallThermostatConfigReady();
void radiatorThermostatConfigReady();
private slots:
void connected();
void disconnected();
void connectionStateChanged(const QAbstractSocket::SocketState &socketState);
void error(QAbstractSocket::SocketError error);
void readData();
void processCubeData(const QByteArray &data);

View File

@ -38,6 +38,13 @@ public:
DeviceEcoButton = 5
};
enum DeviceMode{
Auto = 0,
Manual = 1,
Temporary = 2,
Boost = 3
};
int deviceType() const;
void setDeviceType(const int &deviceType);

View File

@ -0,0 +1,298 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* 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 <http://www.gnu.org/licenses/>. *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include "radiatorthermostat.h"
RadiatorThermostat::RadiatorThermostat(QObject *parent) :
MaxDevice(parent)
{
}
double RadiatorThermostat::confortTemp() const
{
return m_confortTemp;
}
void RadiatorThermostat::setConfortTemp(const double &confortTemp)
{
m_confortTemp = confortTemp;
}
double RadiatorThermostat::ecoTemp() const
{
return m_ecoTemp;
}
void RadiatorThermostat::setEcoTemp(const double &ecoTemp)
{
m_ecoTemp = ecoTemp;
}
double RadiatorThermostat::maxSetPointTemp() const
{
return m_maxSetPointTemp;
}
void RadiatorThermostat::setMaxSetPointTemp(const double &maxSetPointTemp)
{
m_maxSetPointTemp = maxSetPointTemp;
}
double RadiatorThermostat::minSetPointTemp() const
{
return m_minSetPointTemp;
}
void RadiatorThermostat::setMinSetPointTemp(const double &minSetPointTemp)
{
m_minSetPointTemp = minSetPointTemp;
}
double RadiatorThermostat::windowOpenTemp() const
{
return m_windowOpenTemp;
}
void RadiatorThermostat::setWindowOpenTemp(const double &windowOpenTemp)
{
m_windowOpenTemp = windowOpenTemp;
}
double RadiatorThermostat::offsetTemp() const
{
return m_offsetTemp;
}
void RadiatorThermostat::setOffsetTemp(const double &offsetTemp)
{
m_offsetTemp = offsetTemp;
}
int RadiatorThermostat::windowOpenDuration() const
{
return m_windowOpenDuration;
}
void RadiatorThermostat::setWindowOpenDuration(const int &windowOpenDuration)
{
m_windowOpenDuration = windowOpenDuration;
}
int RadiatorThermostat::boostDuration() const
{
return m_boostDuration;
}
void RadiatorThermostat::setBoostDuration(const int &boostDuration)
{
m_boostDuration = boostDuration;
}
int RadiatorThermostat::boostValveValue() const
{
return m_boostValveValue;
}
void RadiatorThermostat::setBoostValveValue(const int &boostValveValue)
{
m_boostValveValue = boostValveValue;
}
QString RadiatorThermostat::discalcingWeekDay() const
{
return m_discalcWeekDay;
}
void RadiatorThermostat::setDiscalcingWeekDay(const QString &discalcingWeekDay)
{
m_discalcWeekDay = discalcingWeekDay;
}
QTime RadiatorThermostat::discalcingTime() const
{
return m_discalcTime;
}
void RadiatorThermostat::setDiscalcingTime(const QTime &discalcingTime)
{
m_discalcTime = discalcingTime;
}
double RadiatorThermostat::valveMaximumSettings() const
{
return m_valveMaximumSettings;
}
void RadiatorThermostat::setValveMaximumSettings(const double &valveMaximumSettings)
{
m_valveMaximumSettings = valveMaximumSettings;
}
double RadiatorThermostat::valveOffset() const
{
return m_valveOffset;
}
void RadiatorThermostat::setValveOffset(const double &valveOffset)
{
m_valveOffset = valveOffset;
}
bool RadiatorThermostat::informationValid() const
{
return m_informationValid;
}
void RadiatorThermostat::setInformationValid(const bool &informationValid)
{
m_informationValid = informationValid;
}
bool RadiatorThermostat::errorOccured() const
{
return m_errorOccured;
}
void RadiatorThermostat::setErrorOccured(const bool &errorOccured)
{
m_errorOccured = errorOccured;
}
bool RadiatorThermostat::isAnswereToCommand() const
{
return m_isAnswerToCommand;
}
void RadiatorThermostat::setIsAnswereToCommand(const bool &isAnswereToCommand)
{
m_isAnswerToCommand = isAnswereToCommand;
}
bool RadiatorThermostat::initialized() const
{
return m_initialized;
}
void RadiatorThermostat::setInitialized(const bool &initialized)
{
m_initialized = initialized;
}
bool RadiatorThermostat::batteryLow() const
{
return m_batteryLow;
}
void RadiatorThermostat::setBatteryLow(const bool &batteryLow)
{
m_batteryLow = batteryLow;
}
bool RadiatorThermostat::linkStatusOK() const
{
return m_linkStatusOK;
}
void RadiatorThermostat::setLinkStatusOK(const bool &linkStatusOK)
{
m_linkStatusOK = linkStatusOK;
}
bool RadiatorThermostat::panelLocked() const
{
return m_panelLocked;
}
void RadiatorThermostat::setPanelLocked(const bool &panelLocked)
{
m_panelLocked = panelLocked;
}
bool RadiatorThermostat::gatewayKnown() const
{
return m_gatewayKnown;
}
void RadiatorThermostat::setGatewayKnown(const bool &gatewayKnown)
{
m_gatewayKnown = gatewayKnown;
}
bool RadiatorThermostat::dtsActive() const
{
return m_dtsActive;
}
void RadiatorThermostat::setDtsActive(const bool &dtsActive)
{
m_dtsActive = dtsActive;
}
int RadiatorThermostat::deviceMode() const
{
return m_deviceMode;
}
void RadiatorThermostat::setDeviceMode(const int &deviceMode)
{
m_deviceMode = deviceMode;
switch (deviceMode) {
case Auto:
m_deviceModeString = "Auto";
break;
case Manual:
m_deviceModeString = "Manuel";
break;
case Temporary:
m_deviceModeString = "Temporary";
break;
case Boost:
m_deviceModeString = "Boost";
break;
default:
m_deviceModeString = "-";
break;
}
}
QString RadiatorThermostat::deviceModeString() const
{
return m_deviceModeString;
}
int RadiatorThermostat::valvePosition() const
{
return m_valvePosition;
}
void RadiatorThermostat::setValvePosition(const int &valvePosition)
{
m_valvePosition = valvePosition;
}
double RadiatorThermostat::setpointTemperature() const
{
return m_setpointTemperature;
}
void RadiatorThermostat::setSetpointTemperatre(const double &setpointTemperature)
{
m_setpointTemperature = setpointTemperature;
}

View File

@ -0,0 +1,144 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* 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 <http://www.gnu.org/licenses/>. *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#ifndef RADIATORTHERMOSTAT_H
#define RADIATORTHERMOSTAT_H
#include <QObject>
#include <QTime>
#include "maxdevice.h"
class RadiatorThermostat : public MaxDevice
{
Q_OBJECT
public:
explicit RadiatorThermostat(QObject *parent = 0);
double confortTemp() const;
void setConfortTemp(const double &confortTemp);
double ecoTemp() const;
void setEcoTemp(const double &ecoTemp);
double maxSetPointTemp() const;
void setMaxSetPointTemp(const double &maxSetPointTemp);
double minSetPointTemp() const;
void setMinSetPointTemp(const double &minSetPointTemp);
double windowOpenTemp() const;
void setWindowOpenTemp(const double &windowOpenTemp);
double offsetTemp() const;
void setOffsetTemp(const double &offsetTemp);
int windowOpenDuration() const;
void setWindowOpenDuration(const int &windowOpenDuration);
int boostDuration() const;
void setBoostDuration(const int &boostDuration);
int boostValveValue() const;
void setBoostValveValue(const int &boostValveValue);
QString discalcingWeekDay() const;
void setDiscalcingWeekDay(const QString &discalcingWeekDay);
QTime discalcingTime() const;
void setDiscalcingTime(const QTime &discalcingTime);
double valveMaximumSettings() const;
void setValveMaximumSettings(const double &valveMaximumSettings);
double valveOffset() const;
void setValveOffset(const double &valveOffset);
bool informationValid() const;
void setInformationValid(const bool &informationValid);
bool errorOccured() const;
void setErrorOccured(const bool &errorOccured);
bool isAnswereToCommand() const;
void setIsAnswereToCommand(const bool &isAnswereToCommand);
bool initialized() const;
void setInitialized(const bool &initialized);
bool batteryLow() const;
void setBatteryLow(const bool &batteryLow);
bool linkStatusOK() const;
void setLinkStatusOK(const bool &linkStatusOK);
bool panelLocked() const;
void setPanelLocked(const bool &panelLocked);
bool gatewayKnown() const;
void setGatewayKnown(const bool &gatewayKnown);
bool dtsActive() const;
void setDtsActive(const bool &dtsActive);
int deviceMode() const;
void setDeviceMode(const int &deviceMode);
QString deviceModeString() const;
int valvePosition() const;
void setValvePosition(const int &valvePosition);
double setpointTemperature() const;
void setSetpointTemperatre(const double &setpointTemperature);
private:
double m_confortTemp;
double m_ecoTemp;
double m_maxSetPointTemp;
double m_minSetPointTemp;
double m_windowOpenTemp;
double m_offsetTemp;
int m_windowOpenDuration;
int m_boostDuration;
int m_boostValveValue;
QString m_discalcWeekDay;
QTime m_discalcTime;
double m_valveMaximumSettings;
double m_valveOffset;
bool m_informationValid;
bool m_errorOccured;
bool m_isAnswerToCommand;
bool m_initialized;
bool m_batteryLow;
bool m_linkStatusOK;
bool m_panelLocked;
bool m_gatewayKnown;
bool m_dtsActive;
int m_deviceMode;
QString m_deviceModeString;
int m_valvePosition;
double m_setpointTemperature;
signals:
public slots:
};
#endif // RADIATORTHERMOSTAT_H

View File

@ -16,119 +16,149 @@
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include "livemessage.h"
#include "wallthermostat.h"
LiveMessage::LiveMessage(QObject *parent) :
QObject(parent)
WallThermostat::WallThermostat(QObject *parent) :
MaxDevice(parent)
{
}
QByteArray LiveMessage::rfAddress() const
double WallThermostat::confortTemp() const
{
return m_rfAddress;
return m_confortTemp;
}
void LiveMessage::setRfAddress(const QByteArray &rfAddress)
void WallThermostat::setConfortTemp(const double &confortTemp)
{
m_rfAddress = rfAddress;
m_confortTemp = confortTemp;
}
bool LiveMessage::informationValid() const
double WallThermostat::ecoTemp() const
{
return m_ecoTemp;
}
void WallThermostat::setEcoTemp(const double &ecoTemp)
{
m_ecoTemp = ecoTemp;
}
double WallThermostat::maxSetPointTemp() const
{
return m_maxSetPointTemp;
}
void WallThermostat::setMaxSetPointTemp(const double &maxSetPointTemp)
{
m_maxSetPointTemp = maxSetPointTemp;
}
double WallThermostat::minSetPointTemp() const
{
return m_minSetPointTemp;
}
void WallThermostat::setMinSetPointTemp(const double &minSetPointTemp)
{
m_minSetPointTemp = minSetPointTemp;
}
bool WallThermostat::informationValid() const
{
return m_informationValid;
}
void LiveMessage::setInformationValid(const bool &informationValid)
void WallThermostat::setInformationValid(const bool &informationValid)
{
m_informationValid = informationValid;
}
bool LiveMessage::errorOccured() const
bool WallThermostat::errorOccured() const
{
return m_errorOccured;
}
void LiveMessage::setErrorOccured(const bool &errorOccured)
void WallThermostat::setErrorOccured(const bool &errorOccured)
{
m_errorOccured = errorOccured;
}
bool LiveMessage::isAnswereToCommand() const
bool WallThermostat::isAnswereToCommand() const
{
return m_isAnswerToCommand;
}
void LiveMessage::setIsAnswereToCommand(const bool &isAnswereToCommand)
void WallThermostat::setIsAnswereToCommand(const bool &isAnswereToCommand)
{
m_isAnswerToCommand = isAnswereToCommand;
}
bool LiveMessage::initialized() const
bool WallThermostat::initialized() const
{
return m_initialized;
}
void LiveMessage::setInitialized(const bool &initialized)
void WallThermostat::setInitialized(const bool &initialized)
{
m_initialized = initialized;
}
bool LiveMessage::batteryLow() const
bool WallThermostat::batteryLow() const
{
return m_batteryLow;
}
void LiveMessage::setBatteryLow(const bool &batteryLow)
void WallThermostat::setBatteryLow(const bool &batteryLow)
{
m_batteryLow = batteryLow;
}
bool LiveMessage::linkStatusOK() const
bool WallThermostat::linkStatusOK() const
{
return m_linkStatusOK;
}
void LiveMessage::setLinkStatusOK(const bool &linkStatusOK)
void WallThermostat::setLinkStatusOK(const bool &linkStatusOK)
{
m_linkStatusOK = linkStatusOK;
}
bool LiveMessage::panelLocked() const
bool WallThermostat::panelLocked() const
{
return m_panelLocked;
}
void LiveMessage::setPanelLocked(const bool &panelLocked)
void WallThermostat::setPanelLocked(const bool &panelLocked)
{
m_panelLocked = panelLocked;
}
bool LiveMessage::gatewayKnown() const
bool WallThermostat::gatewayKnown() const
{
return m_gatewayKnown;
}
void LiveMessage::setGatewayKnown(const bool &gatewayKnown)
void WallThermostat::setGatewayKnown(const bool &gatewayKnown)
{
m_gatewayKnown = gatewayKnown;
}
bool LiveMessage::dtsActive() const
bool WallThermostat::dtsActive() const
{
return m_dtsActive;
}
void LiveMessage::setDtsActive(const bool &dtsActive)
void WallThermostat::setDtsActive(const bool &dtsActive)
{
m_dtsActive = dtsActive;
}
int LiveMessage::deviceMode() const
int WallThermostat::deviceMode() const
{
return m_deviceMode;
}
void LiveMessage::setDeviceMode(const int &deviceMode)
void WallThermostat::setDeviceMode(const int &deviceMode)
{
m_deviceMode = deviceMode;
@ -149,40 +179,29 @@ void LiveMessage::setDeviceMode(const int &deviceMode)
m_deviceModeString = "-";
break;
}
}
QString LiveMessage::deviceModeString() const
QString WallThermostat::deviceModeString() const
{
return m_deviceModeString;
}
int LiveMessage::valvePosition() const
{
return m_valvePosition;
}
void LiveMessage::setValvePosition(const int &valvePosition)
{
m_valvePosition = valvePosition;
}
double LiveMessage::setpointTemperature() const
double WallThermostat::setpointTemperature() const
{
return m_setpointTemperature;
}
void LiveMessage::setSetpointTemperatre(const double &setpointTemperature)
void WallThermostat::setSetpointTemperatre(const double &setpointTemperature)
{
m_setpointTemperature = setpointTemperature;
}
QDateTime LiveMessage::dateTime() const
double WallThermostat::currentTemperature() const
{
return m_dateTime;
return m_currentTemperature;
}
void LiveMessage::setDateTime(const QDateTime dateTime)
void WallThermostat::setCurrentTemperatre(const double &currentTemperature)
{
m_dateTime = dateTime;
m_currentTemperature = currentTemperature;
}

View File

@ -16,27 +16,29 @@
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#ifndef LIVEMESSAGE_H
#define LIVEMESSAGE_H
#ifndef WALLTHERMOSTAT_H
#define WALLTHERMOSTAT_H
#include <QObject>
#include <QDateTime>
#include "maxdevice.h"
class LiveMessage : public QObject
class WallThermostat : public MaxDevice
{
Q_OBJECT
public:
explicit LiveMessage(QObject *parent = 0);
explicit WallThermostat(QObject *parent = 0);
enum DeviceMode{
Auto = 0,
Manual = 1,
Temporary = 2,
Boost = 3
};
double confortTemp() const;
void setConfortTemp(const double &confortTemp);
QByteArray rfAddress() const;
void setRfAddress(const QByteArray & rfAddress);
double ecoTemp() const;
void setEcoTemp(const double &ecoTemp);
double maxSetPointTemp() const;
void setMaxSetPointTemp(const double &maxSetPointTemp);
double minSetPointTemp() const;
void setMinSetPointTemp(const double &minSetPointTemp);
bool informationValid() const;
void setInformationValid(const bool &informationValid);
@ -76,13 +78,15 @@ public:
double setpointTemperature() const;
void setSetpointTemperatre(const double &setpointTemperature);
QDateTime dateTime() const;
void setDateTime(const QDateTime dateTime);
double currentTemperature() const;
void setCurrentTemperatre(const double &currentTemperature);
private:
double m_confortTemp;
double m_ecoTemp;
double m_maxSetPointTemp;
double m_minSetPointTemp;
QByteArray m_rfAddress;
bool m_informationValid;
bool m_errorOccured;
bool m_isAnswerToCommand;
@ -96,7 +100,7 @@ private:
QString m_deviceModeString;
int m_valvePosition;
double m_setpointTemperature;
QDateTime m_dateTime;
double m_currentTemperature;
signals:
@ -104,4 +108,4 @@ public slots:
};
#endif // LIVEMESSAGE_H
#endif // WALLTHERMOSTAT_H