1 #pragma once 2 3 #include <cereal/cereal.hpp> 4 //#include "../cereal/types/string.hpp" 5 //#include "../cereal/types/utility.hpp" 6 //#include "../cereal/types/memory.hpp" 7 //#include "../cereal/types/complex.hpp" 8 //#include "../cereal/types/base_class.hpp" 9 //#include "../cereal/types/array.hpp" 10 //#include "../cereal/types/vector.hpp" 11 //#include "../cereal/types/map.hpp" 12 13 #include "ColorSwitch.h" 14 15 #define sTypeTHBFloat 0x10 //Weather Station 16 #define sTypeWINDNoTemp 0x30 //Weather Station 17 #define sTypeWINDNoTempNoChill 0x31 //Weather Station 18 19 #define sTypeDomoticzSecurity 0x83 20 #define sTypeSmartwaresSwitchRadiator 0x84 21 22 #define sTypeRAINWU 0x70 //Weather Underground (Total rain reported, no counter) 23 #define sTypeRAINByRate 0x71 //DarkSky for example (Only rate, no total, no counter) rate in mm/hour x 10000, so all decimals will fit 24 25 #define sTypeTH_LC_TC 0xA0 //La Cross Temp_Hum combined 26 #define sTypeTEMP_SYSTEM 0xA0 //Internal sensor 27 28 #define wsbaroforecast_heavy_snow 0x01 29 #define wsbaroforecast_snow 0x01 30 #define wsbaroforecast_heavy_rain 0x02 31 #define wsbaroforecast_rain 0x03 32 #define wsbaroforecast_cloudy 0x04 33 #define wsbaroforecast_some_clouds 0x05 34 #define wsbaroforecast_sunny 0x06 35 #define wsbaroforecast_unknown 0x07 36 #define wsbaroforecast_unstable 0x08 37 #define wsbaroforecast_stable 0x09 38 39 #define bmpbaroforecast_stable 0x00 40 #define bmpbaroforecast_sunny 0x01 41 #define bmpbaroforecast_cloudy 0x02 42 #define bmpbaroforecast_unstable 0x03 43 #define bmpbaroforecast_thunderstorm 0x04 44 #define bmpbaroforecast_unknown 0x05 45 #define bmpbaroforecast_rain 0x06 //when forecast was cloudy and pressure is below 1010 we have 50%+ change of rain 46 47 #define pTypeThermostat 0xF2 48 #define sTypeThermSetpoint 0x01 49 #define sTypeThermTemperature 0x02 50 51 52 #define pTypeGeneral 0xF3 53 #define sTypeVisibility 0x01 54 #define sTypeSolarRadiation 0x02 55 #define sTypeSoilMoisture 0x03 56 #define sTypeLeafWetness 0x04 57 #define sTypeSystemTemp 0x05 58 #define sTypePercentage 0x06 59 #define sTypeFan 0x07 60 #define sTypeVoltage 0x08 61 #define sTypePressure 0x09 62 #define sTypeSetPoint 0x10 63 #define sTypeTemperature 0x11 64 #define sTypeZWaveClock 0x12 65 #define sTypeTextStatus 0x13 66 #define sTypeZWaveThermostatMode 0x14 67 #define sTypeZWaveThermostatFanMode 0x15 68 #define sTypeAlert 0x16 69 #define sTypeCurrent 0x17 70 #define sTypeSoundLevel 0x18 71 #define sTypeUV 0x19 72 #define sTypeBaro 0x1A 73 #define sTypeDistance 0x1B 74 #define sTypeCounterIncremental 0x1C 75 #define sTypeKwh 0x1D 76 #define sTypeWaterflow 0x1E 77 #define sTypeCustom 0x1F 78 #define sTypeZWaveAlarm 0x20 79 #define sTypeManagedCounter 0x21 80 #define sTypeZWaveThermostatOperatingState 0x23 81 82 //General Switch 83 #define pTypeGeneralSwitch 0xF4 84 #define sSwitchTypeX10 0x00 85 #define sSwitchTypeARC 0x01 86 #define sSwitchTypeAB400D 0x02 87 #define sSwitchTypeWaveman 0x03 88 #define sSwitchTypeEMW200 0x04 89 #define sSwitchTypeIMPULS 0x05 90 #define sSwitchTypeRisingSun 0x06 91 #define sSwitchTypePhilips 0x07 92 #define sSwitchTypeEnergenie 0x08 93 #define sSwitchTypeEnergenie5 0x09 94 #define sSwitchTypeGDR2 0x0A 95 #define sSwitchTypeAC 0x0B 96 #define sSwitchTypeHEU 0x0C 97 #define sSwitchTypeANSLUT 0x0D 98 #define sSwitchTypeKambrook 0x0E 99 #define sSwitchTypeKoppla 0x0F 100 #define sSwitchTypePT2262 0x10 101 #define sSwitchTypeLightwaveRF 0x11 102 #define sSwitchTypeEMW100 0x12 103 #define sSwitchTypeBBSB 0x13 104 #define sSwitchTypeMDREMOTE 0x14 105 #define sSwitchTypeRSL 0x15 106 #define sSwitchTypeLivolo 0x16 107 #define sSwitchTypeTRC02 0x17 108 #define sSwitchTypeAoke 0x18 109 #define sSwitchTypeTRC02_2 0x19 110 #define sSwitchTypeEurodomest 0x1A 111 #define sSwitchTypeLivoloAppliance 0x1B 112 #define sSwitchTypeBlyss 0x1C 113 #define sSwitchTypeByronSX 0x1D 114 #define sSwitchTypeByronMP001 0x1E 115 #define sSwitchTypeSelectPlus 0x1F 116 #define sSwitchTypeSelectPlus3 0x20 117 #define sSwitchTypeFA20 0x21 118 #define sSwitchTypeChuango 0x22 119 #define sSwitchTypePlieger 0x23 120 #define sSwitchTypeSilvercrest 0x24 121 #define sSwitchTypeMertik 0x25 122 #define sSwitchTypeHomeConfort 0x26 123 #define sSwitchTypePowerfix 0x27 124 #define sSwitchTypeTriState 0x28 125 #define sSwitchTypeDeltronic 0x29 126 #define sSwitchTypeFA500 0x30 127 #define sSwitchTypeHT12E 0x31 128 #define sSwitchTypeEV1527 0x32 129 #define sSwitchTypeElmes 0x33 130 #define sSwitchTypeAster 0x34 131 #define sSwitchTypeSartano 0x35 132 #define sSwitchTypeEurope 0x36 133 #define sSwitchTypeAvidsen 0x37 134 #define sSwitchTypeBofu 0x38 135 #define sSwitchTypeBrel 0x39 136 #define sSwitchTypeRTS 0x3a 137 #define sSwitchTypeElroDB 0x3b 138 #define sSwitchTypeDooya 0x3c 139 #define sSwitchTypeUnitec 0x3d 140 #define sSwitchTypeSelector 0x3e 141 #define sSwitchTypeMaclean 0x3f 142 #define sSwitchTypeR546 0x40 143 #define sSwitchTypeDiya 0x41 144 #define sSwitchTypeX10secu 0x42 145 #define sSwitchTypeAtlantic 0x43 146 #define sSwitchTypeSilvercrestDB 0x44 147 #define sSwitchTypeMedionDB 0x45 148 #define sSwitchTypeVMC 0x46 149 #define sSwitchTypeKeeloq 0x47 150 #define sSwitchCustomSwitch 0x48 151 #define sSwitchGeneralSwitch 0x49 152 #define sSwitchTypeKoch 0x4a 153 #define sSwitchTypeKingpin 0x4b 154 #define sSwitchTypeFunkbus 0x4c 155 #define sSwitchTypeNice 0x4d 156 #define sSwitchTypeForest 0x4e 157 #define sSwitchBlindsT1 0x4f 158 #define sSwitchMC145026 0x50 159 #define sSwitchLobeco 0x51 160 #define sSwitchFriedland 0x52 161 #define sSwitchBFT 0x53 162 #define sSwitchNovatys 0x54 163 #define sSwitchHalemeier 0x55 164 #define sSwitchGaposa 0x56 165 #define sSwitchMiLightv1 0x57 166 #define sSwitchMiLightv2 0x58 167 #define sSwitchHT6P20 0x59 168 #define sSwitchTypeDoitrand 0x5a 169 #define sSwitchTypeWarema 0x5b 170 #define sSwitchTypeAnsluta 0x5c 171 #define sSwitchTypeLivcol 0x5d 172 #define sSwitchTypeBosch 0x5e 173 #define sSwitchTypeNingbo 0x5f 174 #define sSwitchTypeDitec 0x60 175 #define sSwitchTypeSteffen 0x61 176 #define sSwitchTypeAlectoSA 0x62 177 #define sSwitchTypeGPIOset 0x63 178 #define sSwitchLightT1 0x64 179 #define sSwitchTypeKonigSec 0x65 180 #define sSwitchTypeRM174RF 0x66 181 #define sSwitchTypeLiwin 0x67 182 #define sSwitchAuxiliaryT1 0x68 183 #define sSwitchBlindsT2 0x69 184 #define sSwitchLightT2 0x70 185 #define sSwitchContactT1 0x71 186 #define sSwitchTypeYW_Secu 0x6a 187 #define sSwitchTypeMertik_GV60 0x6b 188 #define sSwitchTypeNingbo64 0x6c 189 #define sSwitchTypeX2D 0x6d 190 #define sSwitchTypeHRCMotor 0x6e 191 #define sSwitchTypeVelleman 0x6f 192 #define sSwitchTypeRFCustom 0x72 193 #define sSwitchTypeYW_Sensor 0x73 194 #define sSwitchTypeLegrandcad 0x74 195 #define sSwitchTypeSysfsGpio 0x75 196 #define sSwitchTypeHager 0x76 197 #define sSwitchTypeFaber 0x77 198 #define sSwitchTypeDrayton 0x78 199 #define sSwitchTypeV2Phoenix 0x79 200 201 //Switch commands 202 #define gswitch_sOff 0x00 203 #define gswitch_sOn 0x01 204 #define gswitch_sSetLevel 0x02 205 #define gswitch_sGroupOff 0x03 206 #define gswitch_sGroupOn 0x04 207 #define gswitch_sSetGroupLevel 0x05 208 #define gswitch_sDim 0x06 209 #define gswitch_sBright 0x07 210 #define gswitch_sSound0 0x08 211 #define gswitch_sSound1 0x09 212 #define gswitch_sSound2 0x0A 213 #define gswitch_sSound3 0x0B 214 #define gswitch_sSound4 0x0C 215 #define gswitch_sSound5 0x0D 216 #define gswitch_sSound6 0x0E 217 #define gswitch_sSound7 0x0F 218 #define gswitch_sSound8 0x10 219 #define gswitch_sStop 0x11 220 #define gswitch_sProgram 0x12 221 #define gswitch_sPause 0x13 222 #define gswitch_sPlay 0x14 223 #define gswitch_sSetVolume 0x15 224 #define gswitch_sPlayPlaylist 0x16 225 #define gswitch_sPlayFavorites 0x17 226 #define gswitch_sExecute 0x18 227 #define gswitch_sColor 0x19 228 #define gswitch_sDiscop 0x1a 229 #define gswitch_sDiscom 0x1b 230 231 //-------------- 232 233 #define pTypeLux 0xF6 234 #define sTypeLux 0x01 235 236 #define pTypeTEMP_BARO 0xF7 237 #define sTypeBMP085 0x01 238 239 #define pTypeUsage 0xF8 240 #define sTypeElectric 0x01 241 242 #define pTypeAirQuality 0xF9 243 #define sTypeVoltcraft 0x01 244 245 #define pTypeP1Power 0xFA 246 #define sTypeP1Power 0x01 247 #define mModeP1Norm 0x00 248 #define mModeP1Double 0x01 249 250 #define pTypeP1Gas 0xFB 251 #define sTypeP1Gas 0x02 252 253 #define pTypeYouLess 0xFC 254 #define sTypeYouLess 0x01 255 256 #define pTypeRego6XXTemp 0xFD 257 #define sTypeRego6XXTemp 0x01 258 259 #define pTypeRego6XXValue 0xFE 260 #define sTypeRego6XXStatus 0x02 261 #define sTypeRego6XXCounter 0x03 262 263 //RFY2 (protocol v2) 264 #define sTypeRFY2 0xFE 265 266 //types for evohome 267 #define pTypeEvohome 0x45 268 #define sTypeEvohome 0x00 //Controller 269 270 #define pTypeEvohomeZone 0x46 //Seems easier to define a new type here 271 #define sTypeEvohomeZone 0x00 //Actual temp zone 272 273 #define pTypeEvohomeWater 0x47 //Seems easier to define a new type here 274 #define sTypeEvohomeWater 0x00 //Hot water (Ideally this would just be a zone but for whatever reason evohome treats this differently) 275 276 #define pTypeEvohomeRelay 0x44 //Relay 277 #define sTypeEvohomeRelay 0x00 278 279 //#define sTypeEvohomeOutside 0x30 //If connected 280 //#define sTypeEvohomeStatus 0x40 //Not sure if we can do this in 1 sensor would be for things like zone valve status, boiler relay status (maybe OT values too) and comms errors (maybe seperature sensor or switch for each is easiest) 281 282 typedef struct _tThermostat { 283 uint8_t len; 284 uint8_t type; 285 uint8_t subtype; 286 uint8_t id1; 287 uint8_t id2; 288 uint8_t id3; 289 uint8_t id4; 290 uint8_t dunit; 291 uint8_t battery_level; 292 float temp; 293 float temp1; 294 float temp2; 295 float temp3; 296 uint8_t utemp1; 297 uint8_t utemp2; 298 uint8_t utemp3; 299 300 template <class Archive> serialize_tThermostat301 void serialize(Archive & ar) 302 { 303 ar & cereal::make_nvp("len", len); 304 ar & cereal::make_nvp("type", type); 305 ar & cereal::make_nvp("subtype", subtype); 306 ar & cereal::make_nvp("id1", id1); 307 ar & cereal::make_nvp("id2", id2); 308 ar & cereal::make_nvp("id3", id3); 309 ar & cereal::make_nvp("id4", id4); 310 ar & cereal::make_nvp("dunit", dunit); 311 ar & cereal::make_nvp("battery_level", battery_level); 312 ar & cereal::make_nvp("temp", temp); 313 ar & cereal::make_nvp("temp1", temp1); 314 ar & cereal::make_nvp("temp2", temp2); 315 ar & cereal::make_nvp("temp3", temp3); 316 ar & cereal::make_nvp("utemp1", utemp1); 317 ar & cereal::make_nvp("utemp2", utemp2); 318 ar & cereal::make_nvp("utemp3", utemp3); 319 } 320 _tThermostat_tThermostat321 _tThermostat() 322 { 323 len = sizeof(_tThermostat) - 1; 324 type = pTypeThermostat; 325 subtype = sTypeThermTemperature; 326 battery_level = 255; 327 id1 = 1; 328 id2 = 0; 329 id3 = 0; 330 id4 = 0; 331 dunit = 0; 332 temp = 0; 333 temp1 = 0; 334 temp2 = 0; 335 temp3 = 0; 336 utemp1 = 0; 337 utemp2 = 0; 338 utemp3 = 0; 339 } 340 } tThermostat; 341 342 typedef struct _tTempBaro { 343 uint8_t len; 344 uint8_t type; 345 uint8_t subtype; 346 uint8_t id1; 347 float temp; 348 float baro; 349 float altitude; 350 uint8_t forecast; 351 352 template <class Archive> serialize_tTempBaro353 void serialize(Archive & ar) 354 { 355 ar & cereal::make_nvp("len", len); 356 ar & cereal::make_nvp("type", type); 357 ar & cereal::make_nvp("subtype", subtype); 358 ar & cereal::make_nvp("id1", id1); 359 ar & cereal::make_nvp("temp", temp); 360 ar & cereal::make_nvp("baro", baro); 361 ar & cereal::make_nvp("altitude", altitude); 362 ar & cereal::make_nvp("forecast", forecast); 363 } 364 _tTempBaro_tTempBaro365 _tTempBaro() 366 { 367 len = sizeof(_tTempBaro) - 1; 368 type = pTypeTEMP_BARO; 369 subtype = sTypeBMP085; 370 id1 = 1; 371 temp = 0; 372 baro = 0; 373 altitude = 0; 374 forecast = 0; 375 } 376 } _tTempBaro; 377 378 typedef struct _tAirQualityMeter { 379 uint8_t len; 380 uint8_t type; 381 uint8_t subtype; 382 uint8_t id1; 383 uint8_t id2; 384 int32_t airquality; 385 386 template <class Archive> serialize_tAirQualityMeter387 void serialize(Archive & ar) 388 { 389 ar & cereal::make_nvp("len", len); 390 ar & cereal::make_nvp("type", type); 391 ar & cereal::make_nvp("subtype", subtype); 392 ar & cereal::make_nvp("id1", id1); 393 ar & cereal::make_nvp("id2", id2); 394 ar & cereal::make_nvp("airquality", airquality); 395 } 396 _tAirQualityMeter_tAirQualityMeter397 _tAirQualityMeter() 398 { 399 len = sizeof(_tAirQualityMeter) - 1; 400 type = pTypeAirQuality; 401 subtype = sTypeVoltcraft; 402 id1 = 0; 403 id2 = 1; 404 airquality = 0; 405 } 406 } AirQualityMeter; 407 408 typedef struct _tUsageMeter { 409 uint8_t len; 410 uint8_t type; 411 uint8_t subtype; 412 uint8_t id1; 413 uint8_t id2; 414 uint8_t id3; 415 uint8_t id4; 416 uint8_t dunit; 417 float fusage; 418 419 template <class Archive> serialize_tUsageMeter420 void serialize(Archive & ar) 421 { 422 ar & cereal::make_nvp("len", len); 423 ar & cereal::make_nvp("type", type); 424 ar & cereal::make_nvp("subtype", subtype); 425 ar & cereal::make_nvp("id1", id1); 426 ar & cereal::make_nvp("id2", id2); 427 ar & cereal::make_nvp("id3", id3); 428 ar & cereal::make_nvp("id4", id4); 429 ar & cereal::make_nvp("dunit", dunit); 430 ar & cereal::make_nvp("fusage", fusage); 431 } 432 _tUsageMeter_tUsageMeter433 _tUsageMeter() 434 { 435 len = sizeof(_tUsageMeter) - 1; 436 type = pTypeUsage; 437 subtype = sTypeElectric; 438 id1 = 0; 439 id2 = 0; 440 id3 = 0; 441 id4 = 0; 442 dunit = 0; 443 fusage = 0; 444 } 445 } UsageMeter; 446 447 typedef struct _tLightMeter { 448 uint8_t len; 449 uint8_t type; 450 uint8_t subtype; 451 uint8_t id1; 452 uint8_t id2; 453 uint8_t id3; 454 uint8_t id4; 455 uint8_t dunit; 456 uint8_t battery_level; 457 float fLux; 458 459 template <class Archive> serialize_tLightMeter460 void serialize(Archive & ar) 461 { 462 ar & cereal::make_nvp("len", len); 463 ar & cereal::make_nvp("type", type); 464 ar & cereal::make_nvp("subtype", subtype); 465 ar & cereal::make_nvp("id1", id1); 466 ar & cereal::make_nvp("id2", id2); 467 ar & cereal::make_nvp("id3", id3); 468 ar & cereal::make_nvp("id4", id4); 469 ar & cereal::make_nvp("dunit", dunit); 470 ar & cereal::make_nvp("battery_level", battery_level); 471 ar & cereal::make_nvp("fLux", fLux); 472 } 473 _tLightMeter_tLightMeter474 _tLightMeter() 475 { 476 len = sizeof(_tLightMeter) - 1; 477 type = pTypeLux; 478 subtype = sTypeLux; 479 id1 = 0; 480 id2 = 0; 481 id3 = 0; 482 id4 = 0; 483 battery_level = 255; 484 dunit = 0; 485 fLux = 0; 486 } 487 } LightMeter; 488 489 typedef struct _tGeneralDevice { 490 uint8_t len; 491 uint8_t type; 492 uint8_t subtype; 493 uint8_t id; 494 float floatval1; 495 float floatval2; 496 int32_t intval1; 497 int32_t intval2; 498 char text[64]; 499 500 template <class Archive> serialize_tGeneralDevice501 void serialize(Archive & ar) 502 { 503 ar & cereal::make_nvp("len", len); 504 ar & cereal::make_nvp("type", type); 505 ar & cereal::make_nvp("subtype", subtype); 506 ar & cereal::make_nvp("id", id); 507 ar & cereal::make_nvp("floatval1", floatval1); 508 ar & cereal::make_nvp("floatval2", floatval2); 509 ar & cereal::make_nvp("intval1", intval1); 510 ar & cereal::make_nvp("intval2", intval2); 511 ar & cereal::make_nvp("text", text); 512 } 513 _tGeneralDevice_tGeneralDevice514 _tGeneralDevice() 515 { 516 len = sizeof(_tGeneralDevice) - 1; 517 type = pTypeGeneral; 518 subtype = sTypeVisibility; 519 id = 0; 520 floatval1 = 0; 521 floatval2 = 0; 522 intval1 = 0; 523 intval2 = 0; 524 text[0] = 0; 525 } 526 } GeneralDevice; 527 528 typedef struct _tGeneralSwitch { 529 uint8_t len; 530 uint8_t type; 531 uint8_t subtype; 532 int32_t id; 533 int32_t unitcode; 534 uint8_t cmnd; 535 uint8_t level; 536 uint8_t rssi; 537 uint8_t battery_level; 538 uint8_t seqnbr; 539 int32_t reserved_int; 540 float reserved_float; 541 542 template <class Archive> serialize_tGeneralSwitch543 void serialize(Archive & ar) 544 { 545 ar & cereal::make_nvp("len", len); 546 ar & cereal::make_nvp("type", type); 547 ar & cereal::make_nvp("subtype", subtype); 548 ar & cereal::make_nvp("id", id); 549 ar & cereal::make_nvp("unitcode", unitcode); 550 ar & cereal::make_nvp("cmnd", cmnd); 551 ar & cereal::make_nvp("level", level); 552 ar & cereal::make_nvp("rssi", rssi); 553 ar & cereal::make_nvp("battery_level", battery_level); 554 ar & cereal::make_nvp("seqnbr", seqnbr); 555 ar & cereal::make_nvp("reserved_int", reserved_int); 556 ar & cereal::make_nvp("reserved_float", reserved_float); 557 } 558 _tGeneralSwitch_tGeneralSwitch559 _tGeneralSwitch() 560 { 561 len = sizeof(_tGeneralSwitch) - 1; 562 type = pTypeGeneralSwitch; 563 subtype = sSwitchTypeAC; 564 id = 1; 565 unitcode = 1; 566 seqnbr = 0; 567 reserved_int = 0; 568 reserved_float = 0; 569 level = 0; 570 battery_level = 255; 571 rssi = 12; 572 cmnd = 0; 573 } 574 } GeneralSwitch; 575 576 typedef struct _tP1Power { 577 uint8_t len = sizeof(_tP1Power) - 1; 578 uint8_t type = pTypeP1Power; 579 uint8_t subtype = sTypeP1Power; 580 uint32_t powerusage1 = 0; 581 uint32_t powerusage2 = 0; 582 uint32_t powerdeliv1 = 0; 583 uint32_t powerdeliv2 = 0; 584 uint32_t usagecurrent = 0; 585 uint32_t delivcurrent = 0; 586 int32_t ID = 1; 587 588 template <class Archive> serialize_tP1Power589 void serialize(Archive & ar) 590 { 591 ar & cereal::make_nvp("len", len); 592 ar & cereal::make_nvp("type", type); 593 ar & cereal::make_nvp("subtype", subtype); 594 ar & cereal::make_nvp("powerusage1", powerusage1); 595 ar & cereal::make_nvp("powerusage2", powerusage2); 596 ar & cereal::make_nvp("powerdeliv1", powerdeliv1); 597 ar & cereal::make_nvp("powerdeliv2", powerdeliv2); 598 ar & cereal::make_nvp("usagecurrent", usagecurrent); 599 ar & cereal::make_nvp("delivcurrent", delivcurrent); 600 ar & cereal::make_nvp("ID", ID); 601 } 602 } P1Power; 603 604 typedef struct _tP1Gas { 605 uint8_t len = sizeof(_tP1Gas) - 1; 606 uint8_t type = pTypeP1Gas; 607 uint8_t subtype = sTypeP1Gas; 608 uint32_t gasusage = 0; 609 int32_t ID = 1; 610 611 template <class Archive> serialize_tP1Gas612 void serialize(Archive & ar) 613 { 614 ar & cereal::make_nvp("len", len); 615 ar & cereal::make_nvp("type", type); 616 ar & cereal::make_nvp("subtype", subtype); 617 ar & cereal::make_nvp("gasusage", gasusage); 618 ar & cereal::make_nvp("ID", ID); 619 } 620 } P1Gas; 621 622 typedef struct _tEVOHOME1 { 623 uint8_t len; 624 uint8_t type; 625 uint8_t subtype; 626 uint8_t id1; 627 uint8_t id2; 628 uint8_t id3; 629 uint8_t status; 630 uint8_t mode; 631 uint16_t year; 632 uint8_t month; 633 uint8_t day; 634 uint8_t hrs; 635 uint8_t mins; 636 uint8_t action; 637 638 template <class Archive> serialize_tEVOHOME1639 void serialize(Archive & ar) 640 { 641 ar & cereal::make_nvp("len", len); 642 ar & cereal::make_nvp("type", type); 643 ar & cereal::make_nvp("subtype", subtype); 644 ar & cereal::make_nvp("id1", id1); 645 ar & cereal::make_nvp("id2", id2); 646 ar & cereal::make_nvp("id3", id3); 647 ar & cereal::make_nvp("status", status); 648 ar & cereal::make_nvp("mode", mode); 649 ar & cereal::make_nvp("year", year); 650 ar & cereal::make_nvp("month", month); 651 ar & cereal::make_nvp("day", day); 652 ar & cereal::make_nvp("hrs", hrs); 653 ar & cereal::make_nvp("mins", mins); 654 ar & cereal::make_nvp("action", action); 655 } 656 } EVOHOME1; 657 658 typedef struct _tEVOHOME2 { 659 uint8_t len; 660 uint8_t type; 661 uint8_t subtype; 662 uint8_t id1; 663 uint8_t id2; 664 uint8_t id3; 665 uint8_t zone; 666 uint8_t updatetype; 667 int16_t temperature; 668 uint8_t mode; 669 uint8_t controllermode; 670 uint16_t year; 671 uint8_t month; 672 uint8_t day; 673 uint8_t hrs; 674 uint8_t mins; 675 uint8_t battery_level; 676 677 template <class Archive> serialize_tEVOHOME2678 void serialize(Archive & ar) 679 { 680 ar & cereal::make_nvp("len", len); 681 ar & cereal::make_nvp("type", type); 682 ar & cereal::make_nvp("subtype", subtype); 683 ar & cereal::make_nvp("id1", id1); 684 ar & cereal::make_nvp("id2", id2); 685 ar & cereal::make_nvp("id3", id3); 686 ar & cereal::make_nvp("zone", zone); 687 ar & cereal::make_nvp("updatetype", updatetype); 688 ar & cereal::make_nvp("temperature", temperature); 689 ar & cereal::make_nvp("mode", mode); 690 ar & cereal::make_nvp("controllermode", controllermode); 691 ar & cereal::make_nvp("year", year); 692 ar & cereal::make_nvp("month", month); 693 ar & cereal::make_nvp("day", day); 694 ar & cereal::make_nvp("hrs", hrs); 695 ar & cereal::make_nvp("mins", mins); 696 ar & cereal::make_nvp("battery_level", battery_level); 697 } 698 } EVOHOME2; 699 700 typedef struct _tEVOHOME3 { 701 uint8_t len; 702 uint8_t type; 703 uint8_t subtype; 704 uint8_t id1; 705 uint8_t id2; 706 uint8_t id3; 707 uint8_t devno; 708 uint8_t demand; 709 uint8_t updatetype; 710 uint8_t battery_level; 711 712 template <class Archive> serialize_tEVOHOME3713 void serialize(Archive & ar) 714 { 715 ar & cereal::make_nvp("len", len); 716 ar & cereal::make_nvp("type", type); 717 ar & cereal::make_nvp("subtype", subtype); 718 ar & cereal::make_nvp("id1", id1); 719 ar & cereal::make_nvp("id2", id2); 720 ar & cereal::make_nvp("id3", id3); 721 ar & cereal::make_nvp("devno", devno); 722 ar & cereal::make_nvp("demand", demand); 723 ar & cereal::make_nvp("updatetype", updatetype); 724 ar & cereal::make_nvp("battery_level", battery_level); 725 } 726 } EVOHOME3; 727