#pragma once #include "../main/RFXtrx.h" #if 0 // usage example: _tTempBaro temperature; std::string serialized = domoticztypes::Serialize<_tTempBaro>(temperature); temperature = domoticztypes::Deserialize<_tTempBaro>(serialized); #endif namespace domoticztypes { typedef unsigned char BYTE; struct _tR_HEADER { BYTE packetlength; BYTE packettype; BYTE subtype; BYTE seqnbr; template void serialize(Archive &ar) { ar &cereal::make_nvp("packetlength", packetlength); ar &cereal::make_nvp("packettype", packettype); ar &cereal::make_nvp("subtype", subtype); ar &cereal::make_nvp("seqnbr", seqnbr); }; }; struct _tR_ICMND { BYTE cmnd; BYTE freqsel; BYTE xmitpwr; BYTE msg3; BYTE msg4; BYTE msg5; BYTE msg6; BYTE msg7; BYTE msg8; BYTE msg9; template void serialize(Archive &ar) { ar &cereal::make_nvp("cmnd", cmnd); ar &cereal::make_nvp("freqsel", freqsel); ar &cereal::make_nvp("xmitpwr", xmitpwr); ar &cereal::make_nvp("msg3", msg3); ar &cereal::make_nvp("msg4", msg4); ar &cereal::make_nvp("msg5", msg5); ar &cereal::make_nvp("msg6", msg6); ar &cereal::make_nvp("msg7", msg7); ar &cereal::make_nvp("msg8", msg8); ar &cereal::make_nvp("msg9", msg9); }; }; struct _tR_IRESPONSE { // response on a mode command from the application BYTE cmnd; BYTE msg1; // receiver/transceiver type BYTE msg2; // firmware version BYTE msg3; BYTE msg4; BYTE msg5; BYTE msg6; BYTE msg7; BYTE msg8; BYTE msg9; BYTE msg10; BYTE msg11; BYTE msg12; BYTE msg13; BYTE msg14; BYTE msg15; BYTE msg16; template void serialize(Archive &ar) { // response on a mode command from the application ar &cereal::make_nvp("cmnd", cmnd); ar &cereal::make_nvp("msg1", msg1); // receiver/transceiver type ar &cereal::make_nvp("msg2", msg2); // firmware version ar &cereal::make_nvp("msg3", msg3); ar &cereal::make_nvp("msg4", msg4); ar &cereal::make_nvp("msg5", msg5); ar &cereal::make_nvp("msg6", msg6); ar &cereal::make_nvp("msg7", msg7); ar &cereal::make_nvp("msg8", msg8); ar &cereal::make_nvp("msg9", msg9); ar &cereal::make_nvp("msg10", msg10); ar &cereal::make_nvp("msg11", msg11); ar &cereal::make_nvp("msg12", msg12); ar &cereal::make_nvp("msg13", msg13); ar &cereal::make_nvp("msg14", msg14); ar &cereal::make_nvp("msg15", msg15); ar &cereal::make_nvp("msg16", msg16); }; }; struct _tR_IRESPONSE868 { // response on a mode command from the application BYTE cmnd; BYTE msg1; // receiver/transceiver type BYTE msg2; // firmware version BYTE msg3; BYTE msg4; BYTE msg5; BYTE msg6; BYTE msg7; BYTE msg8; BYTE msg9; BYTE msg10; BYTE msg11; BYTE msg12; BYTE msg13; BYTE msg14; BYTE msg15; BYTE msg16; template void serialize(Archive &ar) { // response on a mode command from the application ar &cereal::make_nvp("cmnd", cmnd); ar &cereal::make_nvp("msg1", msg1); // receiver/transceiver type ar &cereal::make_nvp("msg2", msg2); // firmware version ar &cereal::make_nvp("msg3", msg3); ar &cereal::make_nvp("msg4", msg4); ar &cereal::make_nvp("msg5", msg5); ar &cereal::make_nvp("msg6", msg6); ar &cereal::make_nvp("msg7", msg7); ar &cereal::make_nvp("msg8", msg8); ar &cereal::make_nvp("msg9", msg9); ar &cereal::make_nvp("msg10", msg10); ar &cereal::make_nvp("msg11", msg11); ar &cereal::make_nvp("msg12", msg12); ar &cereal::make_nvp("msg13", msg13); ar &cereal::make_nvp("msg14", msg14); ar &cereal::make_nvp("msg15", msg15); ar &cereal::make_nvp("msg16", msg16); }; }; struct _tR_UNDECODED { BYTE msg1; BYTE msg2; BYTE msg3; BYTE msg4; BYTE msg5; BYTE msg6; BYTE msg7; BYTE msg8; BYTE msg9; BYTE msg10; BYTE msg11; BYTE msg12; BYTE msg13; BYTE msg14; BYTE msg15; BYTE msg16; BYTE msg17; BYTE msg18; BYTE msg19; BYTE msg20; BYTE msg21; BYTE msg22; BYTE msg23; BYTE msg24; BYTE msg25; BYTE msg26; BYTE msg27; BYTE msg28; BYTE msg29; BYTE msg30; BYTE msg31; BYTE msg32; BYTE msg33; template void serialize(Archive &ar) { ar &cereal::make_nvp("msg1", msg1); ar &cereal::make_nvp("msg2", msg2); ar &cereal::make_nvp("msg3", msg3); ar &cereal::make_nvp("msg4", msg4); ar &cereal::make_nvp("msg5", msg5); ar &cereal::make_nvp("msg6", msg6); ar &cereal::make_nvp("msg7", msg7); ar &cereal::make_nvp("msg8", msg8); ar &cereal::make_nvp("msg9", msg9); ar &cereal::make_nvp("msg10", msg10); ar &cereal::make_nvp("msg11", msg11); ar &cereal::make_nvp("msg12", msg12); ar &cereal::make_nvp("msg13", msg13); ar &cereal::make_nvp("msg14", msg14); ar &cereal::make_nvp("msg15", msg15); ar &cereal::make_nvp("msg16", msg16); ar &cereal::make_nvp("msg17", msg17); ar &cereal::make_nvp("msg18", msg18); ar &cereal::make_nvp("msg19", msg19); ar &cereal::make_nvp("msg20", msg20); ar &cereal::make_nvp("msg21", msg21); ar &cereal::make_nvp("msg22", msg22); ar &cereal::make_nvp("msg23", msg23); ar &cereal::make_nvp("msg24", msg24); ar &cereal::make_nvp("msg25", msg25); ar &cereal::make_nvp("msg26", msg26); ar &cereal::make_nvp("msg27", msg27); ar &cereal::make_nvp("msg28", msg28); ar &cereal::make_nvp("msg29", msg29); ar &cereal::make_nvp("msg30", msg30); ar &cereal::make_nvp("msg31", msg31); ar &cereal::make_nvp("msg32", msg32); ar &cereal::make_nvp("msg33", msg33); }; }; struct _tR_RXRESPONSE { // receiver/transmitter messages BYTE msg; template void serialize(Archive &ar) { // receiver/transmitter messages ar &cereal::make_nvp("msg", msg); }; }; struct _tR_LIGHTING1 { BYTE housecode; BYTE unitcode; BYTE cmnd; BYTE filler_rssi; template void serialize(Archive &ar) { ar &cereal::make_nvp("housecode", housecode); ar &cereal::make_nvp("unitcode", unitcode); ar &cereal::make_nvp("cmnd", cmnd); ar &cereal::make_nvp("filler_rssi", filler_rssi); }; }; struct _tR_LIGHTING2 { BYTE id1; BYTE id2; BYTE id3; BYTE id4; BYTE unitcode; BYTE cmnd; BYTE level; BYTE filler_rssi; template void serialize(Archive &ar) { ar &cereal::make_nvp("id1", id1); ar &cereal::make_nvp("id2", id2); ar &cereal::make_nvp("id3", id3); ar &cereal::make_nvp("id4", id4); ar &cereal::make_nvp("unitcode", unitcode); ar &cereal::make_nvp("cmnd", cmnd); ar &cereal::make_nvp("level", level); ar &cereal::make_nvp("filler_rssi", filler_rssi); }; }; struct _tR_LIGHTING3 { BYTE system; BYTE channel8_1; BYTE channel10_9; BYTE cmnd; BYTE filler_rssi; template void serialize(Archive &ar) { ar &cereal::make_nvp("system", system); ar &cereal::make_nvp("channel8_1", channel8_1); ar &cereal::make_nvp("channel10_9", channel10_9); ar &cereal::make_nvp("cmnd", cmnd); ar &cereal::make_nvp("filler_rssi", filler_rssi); }; }; struct _tR_LIGHTING4 { BYTE cmd1; BYTE cmd2; BYTE cmd3; BYTE pulseHigh; BYTE pulseLow; BYTE filler_rssi; template void serialize(Archive &ar) { ar &cereal::make_nvp("cmd1", cmd1); ar &cereal::make_nvp("cmd2", cmd2); ar &cereal::make_nvp("cmd3", cmd3); ar &cereal::make_nvp("pulseHigh", pulseHigh); ar &cereal::make_nvp("pulseLow", pulseLow); ar &cereal::make_nvp("filler_rssi", filler_rssi); }; }; struct _tR_LIGHTING5 { BYTE id1; BYTE id2; BYTE id3; BYTE unitcode; BYTE cmnd; BYTE level; BYTE filler_rssi; template void serialize(Archive &ar) { ar &cereal::make_nvp("id1", id1); ar &cereal::make_nvp("id2", id2); ar &cereal::make_nvp("id3", id3); ar &cereal::make_nvp("unitcode", unitcode); ar &cereal::make_nvp("cmnd", cmnd); ar &cereal::make_nvp("level", level); ar &cereal::make_nvp("filler_rssi", filler_rssi); }; }; struct _tR_LIGHTING6 { BYTE id1; BYTE id2; BYTE groupcode; BYTE unitcode; BYTE cmnd; BYTE cmndseqnbr; BYTE seqnbr2; BYTE filler_rssi; template void serialize(Archive &ar) { ar &cereal::make_nvp("id1", id1); ar &cereal::make_nvp("id2", id2); ar &cereal::make_nvp("groupcode", groupcode); ar &cereal::make_nvp("unitcode", unitcode); ar &cereal::make_nvp("cmnd", cmnd); ar &cereal::make_nvp("cmndseqnbr", cmndseqnbr); ar &cereal::make_nvp("seqnbr2", seqnbr2); ar &cereal::make_nvp("filler_rssi", filler_rssi); }; }; struct _tR_CHIME { BYTE id1; BYTE id2; BYTE sound; BYTE filler_rssi; template void serialize(Archive &ar) { ar &cereal::make_nvp("id1", id1); ar &cereal::make_nvp("id2", id2); ar &cereal::make_nvp("sound", sound); ar &cereal::make_nvp("filler_rssi", filler_rssi); }; }; struct _tR_FAN { BYTE id1; BYTE id2; BYTE id3; BYTE cmnd; BYTE filler_rssi; template void serialize(Archive &ar) { ar &cereal::make_nvp("id1", id1); ar &cereal::make_nvp("id2", id2); ar &cereal::make_nvp("id3", id3); ar &cereal::make_nvp("cmnd", cmnd); ar &cereal::make_nvp("filler_rssi", filler_rssi); }; }; struct _tR_CURTAIN1 { BYTE housecode; BYTE unitcode; BYTE cmnd; BYTE filler; template void serialize(Archive &ar) { ar &cereal::make_nvp("housecode", housecode); ar &cereal::make_nvp("unitcode", unitcode); ar &cereal::make_nvp("cmnd", cmnd); ar &cereal::make_nvp("filler", filler); }; }; struct _tR_BLINDS1 { BYTE id1; BYTE id2; BYTE id3; BYTE unicode_id4; BYTE cmnd; BYTE filler_rssi; template void serialize(Archive &ar) { ar &cereal::make_nvp("id1", id1); ar &cereal::make_nvp("id2", id2); ar &cereal::make_nvp("id3", id3); ar &cereal::make_nvp("unicode_id4", unicode_id4); ar &cereal::make_nvp("cmnd", cmnd); ar &cereal::make_nvp("filler_rssi", filler_rssi); }; }; struct _tR_RFY { BYTE id1; BYTE id2; BYTE id3; BYTE unitcode; BYTE cmnd; BYTE rfu1; BYTE rfu2; BYTE rfu3; BYTE filler_rssi; template void serialize(Archive &ar) { ar &cereal::make_nvp("id1", id1); ar &cereal::make_nvp("id2", id2); ar &cereal::make_nvp("id3", id3); ar &cereal::make_nvp("unitcode", unitcode); ar &cereal::make_nvp("cmnd", cmnd); ar &cereal::make_nvp("rfu1", rfu1); ar &cereal::make_nvp("rfu2", rfu2); ar &cereal::make_nvp("rfu3", rfu3); ar &cereal::make_nvp("filler_rssi", filler_rssi); }; }; struct _tR_HOMECONFORT { BYTE id1; BYTE id2; BYTE id3; BYTE housecode; BYTE unitcode; BYTE cmnd; BYTE rfu1; BYTE rfu2; BYTE filler_rssi; template void serialize(Archive &ar) { ar &cereal::make_nvp("id1", id1); ar &cereal::make_nvp("id2", id2); ar &cereal::make_nvp("id3", id3); ar &cereal::make_nvp("housecode", housecode); ar &cereal::make_nvp("unitcode", unitcode); ar &cereal::make_nvp("cmnd", cmnd); ar &cereal::make_nvp("rfu1", rfu1); ar &cereal::make_nvp("rfu2", rfu2); ar &cereal::make_nvp("filler_rssi", filler_rssi); }; }; struct _tR_FUNKBUS { BYTE id1; BYTE id2; BYTE groupcode; BYTE unitcode; BYTE cmnd; BYTE cmndtime; BYTE devtype_filler; BYTE batterylevel_filler; template void serialize(Archive &ar) { ar &cereal::make_nvp("id1", id1); ar &cereal::make_nvp("id2", id2); ar &cereal::make_nvp("groupcode", groupcode); ar &cereal::make_nvp("unitcode", unitcode); ar &cereal::make_nvp("cmnd", cmnd); ar &cereal::make_nvp("cmndtime", cmndtime); ar &cereal::make_nvp("devtype_filler", devtype_filler); ar &cereal::make_nvp("batterylevel_filler", batterylevel_filler); }; }; struct _tR_SECURITY1 { BYTE id1; BYTE id2; BYTE id3; BYTE status; BYTE batterylevel_filler; template void serialize(Archive &ar) { ar &cereal::make_nvp("id1", id1); ar &cereal::make_nvp("id2", id2); ar &cereal::make_nvp("id3", id3); ar &cereal::make_nvp("status", status); ar &cereal::make_nvp("batterylevel_filler", batterylevel_filler); }; }; struct _tR_SECURITY2 { BYTE id1; BYTE id2; BYTE id3; BYTE id4; BYTE id5; BYTE id6; BYTE id7; BYTE id8; BYTE id9; BYTE id10; BYTE id11; BYTE id12; BYTE id13; BYTE id14; BYTE id15; BYTE id16; BYTE id17; BYTE id18; BYTE id19; BYTE id20; BYTE id21; BYTE id22; BYTE id23; BYTE id24; BYTE batterylevel_filler; template void serialize(Archive &ar) { ar &cereal::make_nvp("id1", id1); ar &cereal::make_nvp("id2", id2); ar &cereal::make_nvp("id3", id3); ar &cereal::make_nvp("id4", id4); ar &cereal::make_nvp("id5", id5); ar &cereal::make_nvp("id6", id6); ar &cereal::make_nvp("id7", id7); ar &cereal::make_nvp("id8", id8); ar &cereal::make_nvp("id9", id9); ar &cereal::make_nvp("id10", id10); ar &cereal::make_nvp("id11", id11); ar &cereal::make_nvp("id12", id12); ar &cereal::make_nvp("id13", id13); ar &cereal::make_nvp("id14", id14); ar &cereal::make_nvp("id15", id15); ar &cereal::make_nvp("id16", id16); ar &cereal::make_nvp("id17", id17); ar &cereal::make_nvp("id18", id18); ar &cereal::make_nvp("id19", id19); ar &cereal::make_nvp("id20", id20); ar &cereal::make_nvp("id21", id21); ar &cereal::make_nvp("id22", id22); ar &cereal::make_nvp("id23", id23); ar &cereal::make_nvp("id24", id24); ar &cereal::make_nvp("batterylevel_filler", batterylevel_filler); }; }; struct _tR_CAMERA1 { BYTE housecode; BYTE cmnd; BYTE filler_rssi; template void serialize(Archive &ar) { ar &cereal::make_nvp("housecode", housecode); ar &cereal::make_nvp("cmnd", cmnd); ar &cereal::make_nvp("filler_rssi", filler_rssi); }; }; struct _tR_REMOTE { BYTE id; BYTE cmnd; BYTE toggle_cmndtype_rssi; template void serialize(Archive &ar) { ar &cereal::make_nvp("id", id); ar &cereal::make_nvp("cmnd", cmnd); ar &cereal::make_nvp("toggle_cmndtype_rssi", toggle_cmndtype_rssi); }; }; struct _tR_THERMOSTAT1 { BYTE id1; BYTE id2; BYTE temperature; BYTE set_point; BYTE status_filler_mode; BYTE filler_rssi; template void serialize(Archive &ar) { ar &cereal::make_nvp("id1", id1); ar &cereal::make_nvp("id2", id2); ar &cereal::make_nvp("temperature", temperature); ar &cereal::make_nvp("set_point", set_point); ar &cereal::make_nvp("status_filler_mode", status_filler_mode); ar &cereal::make_nvp("filler_rssi", filler_rssi); }; }; struct _tR_THERMOSTAT2 { BYTE unitcode; BYTE cmnd; BYTE filler_rssi; template void serialize(Archive &ar) { ar &cereal::make_nvp("unitcode", unitcode); ar &cereal::make_nvp("cmnd", cmnd); ar &cereal::make_nvp("filler_rssi", filler_rssi); }; }; struct _tR_THERMOSTAT3 { BYTE unitcode1; BYTE unitcode2; BYTE unitcode3; BYTE cmnd; BYTE filler_rssi; template void serialize(Archive &ar) { ar &cereal::make_nvp("unitcode1", unitcode1); ar &cereal::make_nvp("unitcode2", unitcode2); ar &cereal::make_nvp("unitcode3", unitcode3); ar &cereal::make_nvp("cmnd", cmnd); ar &cereal::make_nvp("filler_rssi", filler_rssi); }; }; struct _tR_THERMOSTAT4 { BYTE unitcode1; BYTE unitcode2; BYTE unitcode3; BYTE beep; BYTE fan1_speed; BYTE flame_power; BYTE mode; BYTE filler_rssi; template void serialize(Archive &ar) { ar &cereal::make_nvp("unitcode1", unitcode1); ar &cereal::make_nvp("unitcode2", unitcode2); ar &cereal::make_nvp("unitcode3", unitcode3); ar &cereal::make_nvp("beep", beep); ar &cereal::make_nvp("fan1_speed", fan1_speed); ar &cereal::make_nvp("flame_power", flame_power); ar &cereal::make_nvp("mode", mode); ar &cereal::make_nvp("filler_rssi", filler_rssi); }; }; struct _tR_RADIATOR1 { BYTE id1; BYTE id2; BYTE id3; BYTE id4; BYTE unitcode; BYTE cmnd; BYTE temperature; BYTE tempPoint5; BYTE filler_rssi; template void serialize(Archive &ar) { ar &cereal::make_nvp("id1", id1); ar &cereal::make_nvp("id2", id2); ar &cereal::make_nvp("id3", id3); ar &cereal::make_nvp("id4", id4); ar &cereal::make_nvp("unitcode", unitcode); ar &cereal::make_nvp("cmnd", cmnd); ar &cereal::make_nvp("temperature", temperature); ar &cereal::make_nvp("tempPoint5", tempPoint5); ar &cereal::make_nvp("filler_rssi", filler_rssi); }; }; struct _tR_BBQ { BYTE id1; BYTE id2; BYTE sensor1h; BYTE sensor1l; BYTE sensor2h; BYTE sensor2l; BYTE batterylevel_filler; template void serialize(Archive &ar) { ar &cereal::make_nvp("id1", id1); ar &cereal::make_nvp("id2", id2); ar &cereal::make_nvp("sensor1h", sensor1h); ar &cereal::make_nvp("sensor1l", sensor1l); ar &cereal::make_nvp("sensor2h", sensor2h); ar &cereal::make_nvp("sensor2l", sensor2l); ar &cereal::make_nvp("batterylevel_filler", batterylevel_filler); }; }; struct _tR_TEMP_RAIN { BYTE id1; BYTE id2; BYTE temperatureh_tempsignl; BYTE temperaturel; BYTE raintotal1; BYTE raintotal2; BYTE batterylevel_filler; template void serialize(Archive &ar) { ar &cereal::make_nvp("id1", id1); ar &cereal::make_nvp("id2", id2); ar &cereal::make_nvp("temperatureh_tempsignl", temperatureh_tempsignl); ar &cereal::make_nvp("temperaturel", temperaturel); ar &cereal::make_nvp("raintotal1", raintotal1); ar &cereal::make_nvp("raintotal2", raintotal2); ar &cereal::make_nvp("batterylevel_filler", batterylevel_filler); }; }; struct _tR_TEMP { BYTE id1; BYTE id2; BYTE temperatureh_tempsignl; BYTE temperaturel; BYTE batterylevel_filler; template void serialize(Archive &ar) { ar &cereal::make_nvp("id1", id1); ar &cereal::make_nvp("id2", id2); ar &cereal::make_nvp("temperatureh_tempsignl", temperatureh_tempsignl); ar &cereal::make_nvp("temperaturel", temperaturel); ar &cereal::make_nvp("batterylevel_filler", batterylevel_filler); }; }; struct _tR_HUM { BYTE id1; BYTE id2; BYTE humidity; BYTE humidity_status; BYTE batterylevel_filler; template void serialize(Archive &ar) { ar &cereal::make_nvp("id1", id1); ar &cereal::make_nvp("id2", id2); ar &cereal::make_nvp("humidity", humidity); ar &cereal::make_nvp("humidity_status", humidity_status); ar &cereal::make_nvp("batterylevel_filler", batterylevel_filler); }; }; struct _tR_TEMP_HUM { BYTE id1; BYTE id2; BYTE temperatureh_tempsignl; BYTE temperaturel; BYTE humidity; BYTE humidity_status; BYTE batterylevel_filler; template void serialize(Archive &ar) { ar &cereal::make_nvp("id1", id1); ar &cereal::make_nvp("id2", id2); ar &cereal::make_nvp("temperatureh_tempsignl", temperatureh_tempsignl); ar &cereal::make_nvp("temperaturel", temperaturel); ar &cereal::make_nvp("humidity", humidity); ar &cereal::make_nvp("humidity_status", humidity_status); ar &cereal::make_nvp("batterylevel_filler", batterylevel_filler); }; }; struct _tR_BARO { BYTE id1; BYTE id2; BYTE baro1; BYTE baro2; BYTE forecast; BYTE batterylevel_filler; template void serialize(Archive &ar) { ar &cereal::make_nvp("id1", id1); ar &cereal::make_nvp("id2", id2); ar &cereal::make_nvp("baro1", baro1); ar &cereal::make_nvp("baro2", baro2); ar &cereal::make_nvp("forecast", forecast); ar &cereal::make_nvp("batterylevel_filler", batterylevel_filler); }; }; struct _tR_TEMP_HUM_BARO { BYTE id1; BYTE id2; BYTE temperatureh_tempsignl; BYTE temperaturel; BYTE humidity; BYTE humidity_status; BYTE baroh; BYTE barol; BYTE forecast; BYTE batterylevel_filler; template void serialize(Archive &ar) { ar &cereal::make_nvp("id1", id1); ar &cereal::make_nvp("id2", id2); ar &cereal::make_nvp("temperatureh_tempsignl", temperatureh_tempsignl); ar &cereal::make_nvp("temperaturel", temperaturel); ar &cereal::make_nvp("humidity", humidity); ar &cereal::make_nvp("humidity_status", humidity_status); ar &cereal::make_nvp("baroh", baroh); ar &cereal::make_nvp("barol", barol); ar &cereal::make_nvp("forecast", forecast); ar &cereal::make_nvp("batterylevel_filler", batterylevel_filler); }; }; struct _tR_RAIN { BYTE id1; BYTE id2; BYTE rainrateh; BYTE rainratel; BYTE raintotal1; BYTE raintotal2; BYTE raintotal3; BYTE batterylevel_filler; template void serialize(Archive &ar) { ar &cereal::make_nvp("id1", id1); ar &cereal::make_nvp("id2", id2); ar &cereal::make_nvp("rainrateh", rainrateh); ar &cereal::make_nvp("rainratel", rainratel); ar &cereal::make_nvp("raintotal1", raintotal1); ar &cereal::make_nvp("raintotal2", raintotal2); ar &cereal::make_nvp("raintotal3", raintotal3); ar &cereal::make_nvp("batterylevel_filler", batterylevel_filler); }; }; struct _tR_WIND { BYTE id1; BYTE id2; BYTE directionh; BYTE directionl; BYTE av_speedh; BYTE av_speedl; BYTE gusth; BYTE gustl; BYTE temperatureh_tempsignl; BYTE temperaturel; BYTE chillh_chillsign; BYTE chilll; BYTE batterylevel_filler; template void serialize(Archive &ar) { ar &cereal::make_nvp("id1", id1); ar &cereal::make_nvp("id2", id2); ar &cereal::make_nvp("directionh", directionh); ar &cereal::make_nvp("directionl", directionl); ar &cereal::make_nvp("av_speedh", av_speedh); ar &cereal::make_nvp("av_speedl", av_speedl); ar &cereal::make_nvp("gusth", gusth); ar &cereal::make_nvp("gustl", gustl); ar &cereal::make_nvp("temperatureh_tempsignl", temperatureh_tempsignl); ar &cereal::make_nvp("temperaturel", temperaturel); ar &cereal::make_nvp("chillh_chillsign", chillh_chillsign); ar &cereal::make_nvp("chilll", chilll); ar &cereal::make_nvp("batterylevel_filler", batterylevel_filler); }; }; struct _tR_UV { BYTE id1; BYTE id2; BYTE uv; BYTE temperatureh_tempsignl; BYTE temperaturel; BYTE batterylevel_filler; template void serialize(Archive &ar) { ar &cereal::make_nvp("id1", id1); ar &cereal::make_nvp("id2", id2); ar &cereal::make_nvp("uv", uv); ar &cereal::make_nvp("temperatureh_tempsignl", temperatureh_tempsignl); ar &cereal::make_nvp("temperaturel", temperaturel); ar &cereal::make_nvp("batterylevel_filler", batterylevel_filler); }; }; struct _tR_DT { BYTE id1; BYTE id2; BYTE yy; BYTE mm; BYTE dd; BYTE dow; BYTE hr; BYTE min; BYTE sec; BYTE batterylevel_filler; template void serialize(Archive &ar) { ar &cereal::make_nvp("id1", id1); ar &cereal::make_nvp("id2", id2); ar &cereal::make_nvp("yy", yy); ar &cereal::make_nvp("mm", mm); ar &cereal::make_nvp("dd", dd); ar &cereal::make_nvp("dow", dow); ar &cereal::make_nvp("hr", hr); ar &cereal::make_nvp("min", min); ar &cereal::make_nvp("sec", sec); ar &cereal::make_nvp("batterylevel_filler", batterylevel_filler); }; }; struct _tR_CURRENT { BYTE id1; BYTE id2; BYTE count; BYTE ch1h; BYTE ch1l; BYTE ch2h; BYTE ch2l; BYTE ch3h; BYTE ch3l; BYTE batterylevel_filler; template void serialize(Archive &ar) { ar &cereal::make_nvp("id1", id1); ar &cereal::make_nvp("id2", id2); ar &cereal::make_nvp("count", count); ar &cereal::make_nvp("ch1h", ch1h); ar &cereal::make_nvp("ch1l", ch1l); ar &cereal::make_nvp("ch2h", ch2h); ar &cereal::make_nvp("ch2l", ch2l); ar &cereal::make_nvp("ch3h", ch3h); ar &cereal::make_nvp("ch3l", ch3l); ar &cereal::make_nvp("batterylevel_filler", batterylevel_filler); }; }; struct _tR_ENERGY { BYTE id1; BYTE id2; BYTE count; BYTE instant1; BYTE instant2; BYTE instant3; BYTE instant4; BYTE total1; BYTE total2; BYTE total3; BYTE total4; BYTE total5; BYTE total6; BYTE batterylevel_filler; template void serialize(Archive &ar) { ar &cereal::make_nvp("id1", id1); ar &cereal::make_nvp("id2", id2); ar &cereal::make_nvp("count", count); ar &cereal::make_nvp("instant1", instant1); ar &cereal::make_nvp("instant2", instant2); ar &cereal::make_nvp("instant3", instant3); ar &cereal::make_nvp("instant4", instant4); ar &cereal::make_nvp("total1", total1); ar &cereal::make_nvp("total2", total2); ar &cereal::make_nvp("total3", total3); ar &cereal::make_nvp("total4", total4); ar &cereal::make_nvp("total5", total5); ar &cereal::make_nvp("total6", total6); ar &cereal::make_nvp("batterylevel_filler", batterylevel_filler); }; }; struct _tR_CURRENT_ENERGY { BYTE id1; BYTE id2; BYTE count; BYTE ch1h; BYTE ch1l; BYTE ch2h; BYTE ch2l; BYTE ch3h; BYTE ch3l; BYTE total1; BYTE total2; BYTE total3; BYTE total4; BYTE total5; BYTE total6; BYTE batterylevel_filler; template void serialize(Archive &ar) { ar &cereal::make_nvp("id1", id1); ar &cereal::make_nvp("id2", id2); ar &cereal::make_nvp("count", count); ar &cereal::make_nvp("ch1h", ch1h); ar &cereal::make_nvp("ch1l", ch1l); ar &cereal::make_nvp("ch2h", ch2h); ar &cereal::make_nvp("ch2l", ch2l); ar &cereal::make_nvp("ch3h", ch3h); ar &cereal::make_nvp("ch3l", ch3l); ar &cereal::make_nvp("total1", total1); ar &cereal::make_nvp("total2", total2); ar &cereal::make_nvp("total3", total3); ar &cereal::make_nvp("total4", total4); ar &cereal::make_nvp("total5", total5); ar &cereal::make_nvp("total6", total6); ar &cereal::make_nvp("batterylevel_filler", batterylevel_filler); }; }; struct _tR_POWER { BYTE id1; BYTE id2; BYTE voltage; BYTE currentH; BYTE currentL; BYTE powerH; BYTE powerL; BYTE energyH; BYTE energyL; BYTE pf; BYTE freq; BYTE filler_rssi; template void serialize(Archive &ar) { ar &cereal::make_nvp("id1", id1); ar &cereal::make_nvp("id2", id2); ar &cereal::make_nvp("voltage", voltage); ar &cereal::make_nvp("currentH", currentH); ar &cereal::make_nvp("currentL", currentL); ar &cereal::make_nvp("powerH", powerH); ar &cereal::make_nvp("powerL", powerL); ar &cereal::make_nvp("energyH", energyH); ar &cereal::make_nvp("energyL", energyL); ar &cereal::make_nvp("pf", pf); ar &cereal::make_nvp("freq", freq); ar &cereal::make_nvp("filler_rssi", filler_rssi); }; }; struct _tR_WEIGHT { BYTE id1; BYTE id2; BYTE weighthigh; BYTE weightlow; BYTE filler_rssi; template void serialize(Archive &ar) { ar &cereal::make_nvp("id1", id1); ar &cereal::make_nvp("id2", id2); ar &cereal::make_nvp("weighthigh", weighthigh); ar &cereal::make_nvp("weightlow", weightlow); ar &cereal::make_nvp("filler_rssi", filler_rssi); }; }; struct _tR_TIC { BYTE id1; BYTE id2; BYTE id3; BYTE id4; BYTE id5; BYTE contract_type; BYTE counter1_0; BYTE counter1_1; BYTE counter1_2; BYTE counter1_3; BYTE counter2_0; BYTE counter2_1; BYTE counter2_2; BYTE counter2_3; BYTE power_H; BYTE power_L; BYTE state; BYTE batterylevel_filler; template void serialize(Archive &ar) { ar &cereal::make_nvp("id1", id1); ar &cereal::make_nvp("id2", id2); ar &cereal::make_nvp("id3", id3); ar &cereal::make_nvp("id4", id4); ar &cereal::make_nvp("id5", id5); ar &cereal::make_nvp("contract_type", contract_type); ar &cereal::make_nvp("counter1_0", counter1_0); ar &cereal::make_nvp("counter1_1", counter1_1); ar &cereal::make_nvp("counter1_2", counter1_2); ar &cereal::make_nvp("counter1_3", counter1_3); ar &cereal::make_nvp("counter2_0", counter2_0); ar &cereal::make_nvp("counter2_1", counter2_1); ar &cereal::make_nvp("counter2_2", counter2_2); ar &cereal::make_nvp("counter2_3", counter2_3); ar &cereal::make_nvp("power_H", power_H); ar &cereal::make_nvp("power_L", power_L); ar &cereal::make_nvp("state", state); ar &cereal::make_nvp("batterylevel_filler", batterylevel_filler); }; }; struct _tR_CEENCODER { BYTE id1; BYTE id2; BYTE id3; BYTE id4; BYTE counter1_0; BYTE counter1_1; BYTE counter1_2; BYTE counter1_3; BYTE counter2_0; BYTE counter2_1; BYTE counter2_2; BYTE counter2_3; BYTE state; BYTE batterylevel_filler; template void serialize(Archive &ar) { ar &cereal::make_nvp("id1", id1); ar &cereal::make_nvp("id2", id2); ar &cereal::make_nvp("id3", id3); ar &cereal::make_nvp("id4", id4); ar &cereal::make_nvp("counter1_0", counter1_0); ar &cereal::make_nvp("counter1_1", counter1_1); ar &cereal::make_nvp("counter1_2", counter1_2); ar &cereal::make_nvp("counter1_3", counter1_3); ar &cereal::make_nvp("counter2_0", counter2_0); ar &cereal::make_nvp("counter2_1", counter2_1); ar &cereal::make_nvp("counter2_2", counter2_2); ar &cereal::make_nvp("counter2_3", counter2_3); ar &cereal::make_nvp("state", state); ar &cereal::make_nvp("batterylevel_filler", batterylevel_filler); }; }; struct _tR_LINKY { BYTE id1; BYTE id2; BYTE id3; BYTE id4; BYTE runidx_0; BYTE runidx_1; BYTE runidx_2; BYTE runidx_3; BYTE prodidx1_0; BYTE prodidx1_1; BYTE prodidx1_2; BYTE prodidx1_3; BYTE currentidx_rfu; BYTE av_voltage; BYTE power_H; BYTE power_L; BYTE state; BYTE batterylevel_filler; template void serialize(Archive &ar) { ar &cereal::make_nvp("id1", id1); ar &cereal::make_nvp("id2", id2); ar &cereal::make_nvp("id3", id3); ar &cereal::make_nvp("id4", id4); ar &cereal::make_nvp("runidx_0", runidx_0); ar &cereal::make_nvp("runidx_1", runidx_1); ar &cereal::make_nvp("runidx_2", runidx_2); ar &cereal::make_nvp("runidx_3", runidx_3); ar &cereal::make_nvp("prodidx1_0", prodidx1_0); ar &cereal::make_nvp("prodidx1_1", prodidx1_1); ar &cereal::make_nvp("prodidx1_2", prodidx1_2); ar &cereal::make_nvp("prodidx1_3", prodidx1_3); ar &cereal::make_nvp("currentidx_rfu", currentidx_rfu); ar &cereal::make_nvp("av_voltage", av_voltage); ar &cereal::make_nvp("power_H", power_H); ar &cereal::make_nvp("power_L", power_L); ar &cereal::make_nvp("state", state); ar &cereal::make_nvp("batterylevel_filler", batterylevel_filler); }; }; struct _tR_ASYNCPORT { BYTE cmnd; BYTE baudrate; BYTE parity; BYTE databits; BYTE stopbits; BYTE polarity; BYTE filler1; BYTE filler2; template void serialize(Archive &ar) { ar &cereal::make_nvp("cmnd", cmnd); ar &cereal::make_nvp("baudrate", baudrate); ar &cereal::make_nvp("parity", parity); ar &cereal::make_nvp("databits", databits); ar &cereal::make_nvp("stopbits", stopbits); ar &cereal::make_nvp("polarity", polarity); ar &cereal::make_nvp("filler1", filler1); ar &cereal::make_nvp("filler2", filler2); }; }; struct _tR_ASYNCDATA { BYTE datachar[252]; template void serialize(Archive &ar) { ar &cereal::make_nvp("datachar", datachar); }; }; struct _tR_RFXSENSOR { BYTE id; BYTE msg1; BYTE msg2; BYTE filler_rssi; template void serialize(Archive &ar) { ar &cereal::make_nvp("id", id); ar &cereal::make_nvp("msg1", msg1); ar &cereal::make_nvp("msg2", msg2); ar &cereal::make_nvp("filler_rssi", filler_rssi); }; }; struct _tR_RFXMETER { BYTE id1; BYTE id2; BYTE count1; BYTE count2; BYTE count3; BYTE count4; BYTE filler_rssi; template void serialize(Archive &ar) { ar &cereal::make_nvp("id1", id1); ar &cereal::make_nvp("id2", id2); ar &cereal::make_nvp("count1", count1); ar &cereal::make_nvp("count2", count2); ar &cereal::make_nvp("count3", count3); ar &cereal::make_nvp("count4", count4); ar &cereal::make_nvp("filler_rssi", filler_rssi); }; }; struct _tR_FS20 { BYTE hc1; BYTE hc2; BYTE addr; BYTE cmd1; BYTE cmd2; BYTE filler_rssi; template void serialize(Archive &ar) { ar &cereal::make_nvp("hc1", hc1); ar &cereal::make_nvp("hc2", hc2); ar &cereal::make_nvp("addr", addr); ar &cereal::make_nvp("cmd1", cmd1); ar &cereal::make_nvp("cmd2", cmd2); ar &cereal::make_nvp("filler_rssi", filler_rssi); }; }; /* struct _tR_RAW { BYTE repeat; struct{ BYTE uint_msb; BYTE uint_lsb; } _tR_pulse[124]; template void serialize (Archive &ar) { ar & cereal::make_nvp("repeat", repeat); template void serialize (Archive &ar){ ar & cereal::make_nvp("uint_msb", uint_msb); ar & cereal::make_nvp("uint_lsb", uint_lsb); }; }; }; */ struct _tRDomoticz { _tR_HEADER HEADER; union { _tR_ICMND ICMND; _tR_IRESPONSE IRESPONSE; _tR_IRESPONSE868 IRESPONSE868; _tR_UNDECODED UNDECODED; _tR_RXRESPONSE RXRESPONSE; _tR_LIGHTING1 LIGHTING1; _tR_LIGHTING2 LIGHTING2; _tR_LIGHTING3 LIGHTING3; _tR_LIGHTING4 LIGHTING4; _tR_LIGHTING5 LIGHTING5; _tR_LIGHTING6 LIGHTING6; _tR_CHIME CHIME; _tR_FAN FAN; _tR_CURTAIN1 CURTAIN1; _tR_BLINDS1 BLINDS1; _tR_RFY RFY; _tR_HOMECONFORT HOMECONFORT; _tR_FUNKBUS FUNKBUS; _tR_SECURITY1 SECURITY1; _tR_SECURITY2 SECURITY2; _tR_CAMERA1 CAMERA1; _tR_REMOTE REMOTE; _tR_THERMOSTAT1 THERMOSTAT1; _tR_THERMOSTAT2 THERMOSTAT2; _tR_THERMOSTAT3 THERMOSTAT3; _tR_THERMOSTAT4 THERMOSTAT4; _tR_RADIATOR1 RADIATOR1; _tR_BBQ BBQ; _tR_TEMP_RAIN TEMP_RAIN; _tR_TEMP TEMP; _tR_HUM HUM; _tR_TEMP_HUM TEMP_HUM; _tR_BARO BARO; _tR_TEMP_HUM_BARO TEMP_HUM_BARO; _tR_RAIN RAIN; _tR_WIND WIND; _tR_UV UV; _tR_DT DT; _tR_CURRENT CURRENT; _tR_ENERGY ENERGY; _tR_CURRENT_ENERGY CURRENT_ENERGY; _tR_POWER POWER; _tR_WEIGHT WEIGHT; _tR_TIC TIC; _tR_CEENCODER CEENCODER; _tR_LINKY LINKY; _tR_ASYNCPORT ASYNCPORT; _tR_ASYNCDATA ASYNCDATA; _tR_RFXSENSOR RFXSENSOR; _tR_RFXMETER RFXMETER; }; }; typedef union { RBUF rfbuf; _tRDomoticz domoticz; } _tRDOMOTICZRBUF; /* serializes a struct to a std::string */ template std::string Serialize(StructType buf) { std::stringstream stream; { // we start a new scope, so the archive flushes to the stream upon destruction cereal::PortableBinaryOutputArchive oarchive(stream); oarchive(buf); } return stream.str(); }; /* deserializes a std::string to a struct */ template StructType Deserialize(const std::string &str) { std::stringstream stream(str); cereal::PortableBinaryInputArchive iarchive(stream); StructType result; iarchive(result); return result; }; } // namespace domoticztypes