diff --git a/components/truma_inetbox/TrumaiNetBoxApp.cpp b/components/truma_inetbox/TrumaiNetBoxApp.cpp index a74ea42..8a9be8d 100644 --- a/components/truma_inetbox/TrumaiNetBoxApp.cpp +++ b/components/truma_inetbox/TrumaiNetBoxApp.cpp @@ -314,13 +314,36 @@ const u_int8_t *TrumaiNetBoxApp::lin_multiframe_recieved(const u_int8_t *message ESP_LOGI(TAG, "StatusFrameAircon"); // Example: // SID<---------PREAMBLE---------->|<---MSG_HEAD---->| + // - ac temps form 16 - 30 C in +2 steps + // - activation and deactivation of the ac ventilating // BB.00.1F.00.1E.00.00.22.FF.FF.FF.54.01.12.35.00.AA.00.00.71.01.00.00.00.00.86.0B.00.00.00.00.00.00.AA.0A + // BB.00.1F.00.1E.00.00.22.FF.FF.FF.54.01.12.35.00.A5.00.00.71.01.00.00.00.00.8B.0B.00.00.00.00.00.00.AA.0A + // BB.00.1F.00.1E.00.00.22.FF.FF.FF.54.01.12.35.00.A5.00.00.71.01.00.00.00.00.8B.0B.00.00.00.00.00.00.AA.0A + // BB.00.1F.00.1E.00.00.22.FF.FF.FF.54.01.12.35.00.4B.05.00.71.01.4A.0B.00.00.8B.0B.00.00.00.00.00.00.AA.0A + // BB.00.1F.00.1E.00.00.22.FF.FF.FF.54.01.12.35.00.37.05.00.71.01.5E.0B.00.00.8B.0B.00.00.00.00.00.00.AA.0A + // BB.00.1F.00.1E.00.00.22.FF.FF.FF.54.01.12.35.00.24.05.00.71.01.72.0B.00.00.8A.0B.00.00.00.00.00.00.AA.0A + // BB.00.1F.00.1E.00.00.22.FF.FF.FF.54.01.12.35.00.13.05.00.71.01.86.0B.00.00.87.0B.00.00.00.00.00.00.AA.0A + // BB.00.1F.00.1E.00.00.22.FF.FF.FF.54.01.12.35.00.FC.05.00.71.01.9A.0B.00.00.89.0B.00.00.00.00.00.00.AA.0A + // BB.00.1F.00.1E.00.00.22.FF.FF.FF.54.01.12.35.00.E8.05.00.71.01.AE.0B.00.00.89.0B.00.00.00.00.00.00.AA.0A + // BB.00.1F.00.1E.00.00.22.FF.FF.FF.54.01.12.35.00.D5.05.00.71.01.C2.0B.00.00.88.0B.00.00.00.00.00.00.AA.0A + // BB.00.1F.00.1E.00.00.22.FF.FF.FF.54.01.12.35.00.C1.05.00.71.01.D6.0B.00.00.88.0B.00.00.00.00.00.00.AA.0A + // BB.00.1F.00.1E.00.00.22.FF.FF.FF.54.01.12.35.00.A7.00.00.71.01.00.00.00.00.89.0B.00.00.00.00.00.00.AA.0A + // BB.00.1F.00.1E.00.00.22.FF.FF.FF.54.01.12.35.00.C2.04.00.71.01.D6.0B.00.00.88.0B.00.00.00.00.00.00.AA.0A + // BB.00.1F.00.1E.00.00.22.FF.FF.FF.54.01.12.35.00.13.04.00.71.01.86.0B.00.00.88.0B.00.00.00.00.00.00.AA.0A + // BB.00.1F.00.1E.00.00.22.FF.FF.FF.54.01.12.35.00.A8.00.00.71.01.00.00.00.00.88.0B.00.00.00.00.00.00.AA.0A this->status_aircon_ = statusFrame->inner.aircon; this->status_aircon_valid_ = true; this->status_aircon_updated_ = true; this->update_status_aircon_stale_ = false; return response; + } else if (header->message_type == STATUS_FRAME_AIRCON_INIT && + header->message_length == sizeof(StatusFrameAirconInit)) { + ESP_LOGI(TAG, "StatusFrameAirconInit"); + // Example: + // SID<---------PREAMBLE---------->|<---MSG_HEAD---->| + // BB.00.1F.00.1E.00.00.22.FF.FF.FF.54.01.16.3F.00.E2.00.00.71.01.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00 + return response; } else if (header->message_type == STATUS_FRAME_TIMER && header->message_length == sizeof(StatusFrameTimer)) { ESP_LOGI(TAG, "StatusFrameTimer"); // EXAMPLE: @@ -402,6 +425,10 @@ const u_int8_t *TrumaiNetBoxApp::lin_multiframe_recieved(const u_int8_t *message // VarioHeat Comfort w/o E-Kit // BB.00.1F.00.1E.00.00.22.FF.FF.FF.54.01.0C.0B.00.C2.02.00.01.00.51.00.00.05.01.00.66.10 - P5.01.00 0051.00 // BB.00.1F.00.1E.00.00.22.FF.FF.FF.54.01.0C.0B.00.64.02.01.01.00.20.06.02.03.00.00.00.00 - H3.00.00 0620.02 + // Combi6DE + Saphir Compact AC + // BB.00.1F.00.1E.00.00.22.FF.FF.FF.54.01.0C.0B.00.C7.03.00.01.00.50.00.00.04.03.00.60.10 + // BB.00.1F.00.1E.00.00.22.FF.FF.FF.54.01.0C.0B.00.71.03.01.01.00.10.03.02.06.00.02.00.00 + // BB.00.1F.00.1E.00.00.22.FF.FF.FF.54.01.0C.0B.00.7C.03.02.01.00.01.0C.00.01.02.01.00.00 auto device = statusFrame->inner.device; diff --git a/components/truma_inetbox/TrumaiNetBoxApp.h b/components/truma_inetbox/TrumaiNetBoxApp.h index 09fa837..dd6ae0f 100644 --- a/components/truma_inetbox/TrumaiNetBoxApp.h +++ b/components/truma_inetbox/TrumaiNetBoxApp.h @@ -38,8 +38,8 @@ namespace truma_inetbox { #define STATUS_FRAME_UNKNOWN_36 0x36 #define STATUS_FRAME_TIMER_RESPONSE (STATUS_FRAME_TIMER - 1) #define STATUS_FRAME_TIMER 0x3D -// Error response - unknown function -#define STATUS_FRAME_UNKNOWN_3E 0x3E +#define STATUS_FRAME_AIRCON_INIT_RESPONSE (STATUS_FRAME_AIRCON_INIT - 1) +#define STATUS_FRAME_AIRCON_INIT 0x3F // Error response - unknown function #define STATUS_FRAME_UNKNOWN_40 0x40 @@ -228,27 +228,38 @@ struct StatusFrameHeaterResponse { // NOLINT(altera-struct-pack-align) // Length 18 (0x12) // TODO -struct StatusFrameAircon { // NOLINT(altera-struct-pack-align) +struct StatusFrameAircon { // NOLINT(altera-struct-pack-align) + // Mode? 00 - OFF, 04 - AC Ventilation, 05 - AC Cooling u_int8_t unknown_01; + // 0x00 u_int8_t unknown_02; + // 0x71 u_int8_t unknown_03; + // 0x01 u_int8_t unknown_04; - u_int8_t unknown_05; - u_int8_t unknown_06; + u_int16_t target_temp_room; + // 0x00 u_int8_t unknown_07; + // 0x00 u_int8_t unknown_08; - u_int8_t unknown_09; - u_int8_t unknown_10; + // No idea why two current_temp + u_int16_t current_temp_aircon; + // 0x00 u_int8_t unknown_11; + // 0x00 u_int8_t unknown_12; + // 0x00 u_int8_t unknown_13; + // 0x00 u_int8_t unknown_14; + // 0x00 u_int8_t unknown_15; + // 0x00 u_int8_t unknown_16; - u_int8_t unknown_17; - u_int8_t unknown_18; + u_int16_t current_temp_room; } __attribute__((packed)); +// TODO struct StatusFrameAirconResponse { // NOLINT(altera-struct-pack-align) // TODO } __attribute__((packed)); @@ -366,7 +377,35 @@ struct StatusFrameDevice { // NOLINT(altera-struct-pack-align) // 0x10, 0x12 on CPplus // 0x00 on Combi4, Vario Heat u_int8_t unknown_3; +} __attribute__((packed)); +// Length 22 (0x16) +// TODO +struct StatusFrameAirconInit { // NOLINT(altera-struct-pack-align) + u_int8_t unknown_01; // 0x00 + u_int8_t unknown_02; // 0x00 + // 0x71 + u_int8_t unknown_03; + // 0x01 + u_int8_t unknown_04; + u_int8_t unknown_05; // 0x00 + u_int8_t unknown_06; // 0x00 + u_int8_t unknown_07; // 0x00 + u_int8_t unknown_08; // 0x00 + u_int8_t unknown_09; // 0x00 + u_int8_t unknown_10; // 0x00 + u_int8_t unknown_11; // 0x00 + u_int8_t unknown_12; // 0x00 + u_int8_t unknown_13; // 0x00 + u_int8_t unknown_14; // 0x00 + u_int8_t unknown_15; // 0x00 + u_int8_t unknown_16; // 0x00 + u_int8_t unknown_17; // 0x00 + u_int8_t unknown_18; // 0x00 + u_int8_t unknown_19; // 0x00 + u_int8_t unknown_20; // 0x00 + u_int8_t unknown_21; // 0x00 + u_int8_t unknown_22; // 0x00 } __attribute__((packed)); union StatusFrame { // NOLINT(altera-struct-pack-align) @@ -383,6 +422,7 @@ union StatusFrame { // NOLINT(altera-struct-pack-align) StatusFrameClock clock; StatusFrameConfig config; StatusFrameDevice device; + StatusFrameAirconInit airconInit; } __attribute__((packed)); } inner; } __attribute__((packed)); @@ -512,7 +552,6 @@ class TrumaiNetBoxApp : public LinBusProtocol { bool update_status_heater_stale_ = false; StatusFrameHeaterResponse update_status_heater_; - bool update_status_aircon_stale_ = false; // Prepared means `update_status_timer_` was copied from `status_timer_`.