diff --git a/applications/plugins/weather_station/protocols/acurite_592txr.c b/applications/plugins/weather_station/protocols/acurite_592txr.c index 5384a3c91..087ce1b52 100644 --- a/applications/plugins/weather_station/protocols/acurite_592txr.c +++ b/applications/plugins/weather_station/protocols/acurite_592txr.c @@ -144,6 +144,13 @@ static void ws_protocol_acurite_592txr_remote_controller(WSBlockGeneric* instanc instance->temp = ((float)(temp_raw)-1000) / 10.0f; instance->btn = WS_NO_BTN; + + //DATE AGE set + FuriHalRtcDateTime curr_dt; + furi_hal_rtc_get_datetime(&curr_dt); + uint32_t curr_ts = furi_hal_rtc_datetime_to_timestamp(&curr_dt); + + instance->agedata = curr_ts; } void ws_protocol_decoder_acurite_592txr_feed(void* context, bool level, uint32_t duration) { diff --git a/applications/plugins/weather_station/protocols/acurite_606tx.c b/applications/plugins/weather_station/protocols/acurite_606tx.c index 4cb5d18b8..8dfbe1363 100644 --- a/applications/plugins/weather_station/protocols/acurite_606tx.c +++ b/applications/plugins/weather_station/protocols/acurite_606tx.c @@ -123,6 +123,13 @@ static void ws_protocol_acurite_606tx_remote_controller(WSBlockGeneric* instance } instance->btn = WS_NO_BTN; instance->humidity = WS_NO_HUMIDITY; + + //DATE AGE set + FuriHalRtcDateTime curr_dt; + furi_hal_rtc_get_datetime(&curr_dt); + uint32_t curr_ts = furi_hal_rtc_datetime_to_timestamp(&curr_dt); + + instance->agedata = curr_ts; } void ws_protocol_decoder_acurite_606tx_feed(void* context, bool level, uint32_t duration) { diff --git a/applications/plugins/weather_station/protocols/acurite_609txc.c b/applications/plugins/weather_station/protocols/acurite_609txc.c index aeb0785eb..89a168100 100644 --- a/applications/plugins/weather_station/protocols/acurite_609txc.c +++ b/applications/plugins/weather_station/protocols/acurite_609txc.c @@ -123,6 +123,13 @@ static void ws_protocol_acurite_609txc_remote_controller(WSBlockGeneric* instanc instance->temp = (temp_raw >> 4) * 0.1f; instance->humidity = (instance->data >> 8) & 0xff; instance->btn = WS_NO_BTN; + + //DATE AGE set + FuriHalRtcDateTime curr_dt; + furi_hal_rtc_get_datetime(&curr_dt); + uint32_t curr_ts = furi_hal_rtc_datetime_to_timestamp(&curr_dt); + + instance->agedata = curr_ts; } void ws_protocol_decoder_acurite_609txc_feed(void* context, bool level, uint32_t duration) { diff --git a/applications/plugins/weather_station/protocols/ambient_weather.c b/applications/plugins/weather_station/protocols/ambient_weather.c index 5ae22b790..3f19033ec 100644 --- a/applications/plugins/weather_station/protocols/ambient_weather.c +++ b/applications/plugins/weather_station/protocols/ambient_weather.c @@ -160,6 +160,13 @@ static void ws_protocol_ambient_weather_remote_controller(WSBlockGeneric* instan ERROR; } */ + + //DATE AGE set + FuriHalRtcDateTime curr_dt; + furi_hal_rtc_get_datetime(&curr_dt); + uint32_t curr_ts = furi_hal_rtc_datetime_to_timestamp(&curr_dt); + + instance->agedata = curr_ts; } void ws_protocol_decoder_ambient_weather_feed(void* context, bool level, uint32_t duration) { diff --git a/applications/plugins/weather_station/protocols/auriol_hg0601a.c b/applications/plugins/weather_station/protocols/auriol_hg0601a.c index d5f89fc8b..252565292 100644 --- a/applications/plugins/weather_station/protocols/auriol_hg0601a.c +++ b/applications/plugins/weather_station/protocols/auriol_hg0601a.c @@ -1,3 +1,6 @@ +#include +#include + #include "auriol_hg0601a.h" #define TAG "WSProtocolAuriol_TH" @@ -133,6 +136,13 @@ static void ws_protocol_auriol_th_remote_controller(WSBlockGeneric* instance) { } instance->humidity = (instance->data >> 1) & 0x7F; + + //DATE AGE set + FuriHalRtcDateTime curr_dt; + furi_hal_rtc_get_datetime(&curr_dt); + uint32_t curr_ts = furi_hal_rtc_datetime_to_timestamp(&curr_dt); + + instance->agedata = curr_ts; } void ws_protocol_decoder_auriol_th_feed(void* context, bool level, uint32_t duration) { diff --git a/applications/plugins/weather_station/protocols/gt_wt_02.c b/applications/plugins/weather_station/protocols/gt_wt_02.c index cbe119192..5edb1947c 100644 --- a/applications/plugins/weather_station/protocols/gt_wt_02.c +++ b/applications/plugins/weather_station/protocols/gt_wt_02.c @@ -135,6 +135,12 @@ static void ws_protocol_gt_wt_02_remote_controller(WSBlockGeneric* instance) { instance->temp = (float)((~(instance->data >> 13) & 0x07FF) + 1) / -10.0f; } + //DATE AGE set + FuriHalRtcDateTime curr_dt; + furi_hal_rtc_get_datetime(&curr_dt); + uint32_t curr_ts = furi_hal_rtc_datetime_to_timestamp(&curr_dt); + instance->agedata = curr_ts; + instance->humidity = (instance->data >> 6) & 0x7F; if(instance->humidity <= 10) // actually the sensors sends 10 below working range of 20% instance->humidity = 0; diff --git a/applications/plugins/weather_station/protocols/gt_wt_03.c b/applications/plugins/weather_station/protocols/gt_wt_03.c index 7831cf069..1e601e523 100644 --- a/applications/plugins/weather_station/protocols/gt_wt_03.c +++ b/applications/plugins/weather_station/protocols/gt_wt_03.c @@ -179,6 +179,13 @@ static void ws_protocol_gt_wt_03_remote_controller(WSBlockGeneric* instance) { } else { instance->temp = (float)((~(instance->data >> 9) & 0x07FF) + 1) / -10.0f; } + + //DATE AGE set + FuriHalRtcDateTime curr_dt; + furi_hal_rtc_get_datetime(&curr_dt); + uint32_t curr_ts = furi_hal_rtc_datetime_to_timestamp(&curr_dt); + + instance->agedata = curr_ts; } void ws_protocol_decoder_gt_wt_03_feed(void* context, bool level, uint32_t duration) { diff --git a/applications/plugins/weather_station/protocols/infactory.c b/applications/plugins/weather_station/protocols/infactory.c index 2d444d981..978b837f2 100644 --- a/applications/plugins/weather_station/protocols/infactory.c +++ b/applications/plugins/weather_station/protocols/infactory.c @@ -148,6 +148,13 @@ static void ws_protocol_infactory_remote_controller(WSBlockGeneric* instance) { instance->humidity = (((instance->data >> 8) & 0x0F) * 10) + ((instance->data >> 4) & 0x0F); // BCD, 'A0'=100%rH instance->channel = instance->data & 0x03; + + //DATE AGE set + FuriHalRtcDateTime curr_dt; + furi_hal_rtc_get_datetime(&curr_dt); + uint32_t curr_ts = furi_hal_rtc_datetime_to_timestamp(&curr_dt); + + instance->agedata = curr_ts; } void ws_protocol_decoder_infactory_feed(void* context, bool level, uint32_t duration) { diff --git a/applications/plugins/weather_station/protocols/lacrosse_tx141thbv2.c b/applications/plugins/weather_station/protocols/lacrosse_tx141thbv2.c index e4b612250..8837f730b 100644 --- a/applications/plugins/weather_station/protocols/lacrosse_tx141thbv2.c +++ b/applications/plugins/weather_station/protocols/lacrosse_tx141thbv2.c @@ -123,6 +123,13 @@ static void ws_protocol_lacrosse_tx141thbv2_remote_controller(WSBlockGeneric* in instance->channel = ((instance->data >> 29) & 0x03) + 1; instance->temp = ((float)((instance->data >> 17) & 0x0FFF) - 500.0f) / 10.0f; instance->humidity = (instance->data >> 9) & 0xFF; + + //DATE AGE set + FuriHalRtcDateTime curr_dt; + furi_hal_rtc_get_datetime(&curr_dt); + uint32_t curr_ts = furi_hal_rtc_datetime_to_timestamp(&curr_dt); + + instance->agedata = curr_ts; } void ws_protocol_decoder_lacrosse_tx141thbv2_feed(void* context, bool level, uint32_t duration) { diff --git a/applications/plugins/weather_station/protocols/nexus_th.c b/applications/plugins/weather_station/protocols/nexus_th.c index 7d4a77aea..132e38050 100644 --- a/applications/plugins/weather_station/protocols/nexus_th.c +++ b/applications/plugins/weather_station/protocols/nexus_th.c @@ -135,6 +135,13 @@ static void ws_protocol_nexus_th_remote_controller(WSBlockGeneric* instance) { } instance->humidity = instance->data & 0xFF; + + //DATE AGE set + FuriHalRtcDateTime curr_dt; + furi_hal_rtc_get_datetime(&curr_dt); + uint32_t curr_ts = furi_hal_rtc_datetime_to_timestamp(&curr_dt); + + instance->agedata = curr_ts; } void ws_protocol_decoder_nexus_th_feed(void* context, bool level, uint32_t duration) { diff --git a/applications/plugins/weather_station/protocols/thermopro_tx4.c b/applications/plugins/weather_station/protocols/thermopro_tx4.c index 0882bc33d..29aaf0b35 100644 --- a/applications/plugins/weather_station/protocols/thermopro_tx4.c +++ b/applications/plugins/weather_station/protocols/thermopro_tx4.c @@ -132,6 +132,13 @@ static void ws_protocol_thermopro_tx4_remote_controller(WSBlockGeneric* instance } instance->humidity = (instance->data >> 1) & 0xFF; + + //DATE AGE set + FuriHalRtcDateTime curr_dt; + furi_hal_rtc_get_datetime(&curr_dt); + uint32_t curr_ts = furi_hal_rtc_datetime_to_timestamp(&curr_dt); + + instance->agedata = curr_ts; } void ws_protocol_decoder_thermopro_tx4_feed(void* context, bool level, uint32_t duration) { diff --git a/applications/plugins/weather_station/protocols/ws_generic.c b/applications/plugins/weather_station/protocols/ws_generic.c index 174531090..f653a86a1 100644 --- a/applications/plugins/weather_station/protocols/ws_generic.c +++ b/applications/plugins/weather_station/protocols/ws_generic.c @@ -99,6 +99,12 @@ bool ws_block_generic_serialize( break; } + temp_data = instance->agedata; + if(!flipper_format_write_uint32(flipper_format, "Old", &temp_data, 1)) { + FURI_LOG_E(TAG, "Unable to add agedata"); + break; + } + temp_data = instance->channel; if(!flipper_format_write_uint32(flipper_format, "Ch", &temp_data, 1)) { FURI_LOG_E(TAG, "Unable to add Channel"); @@ -168,11 +174,17 @@ bool ws_block_generic_deserialize(WSBlockGeneric* instance, FlipperFormat* flipp } instance->humidity = (uint8_t)temp_data; - if(!flipper_format_read_uint32(flipper_format, "Ch", (uint32_t*)&temp_data, 1)) { - FURI_LOG_E(TAG, "Missing Channel"); + if(!flipper_format_read_uint32(flipper_format, "Old", (uint32_t*)&temp_data, 1)) { + FURI_LOG_E(TAG, "Missing agedata"); break; } - instance->channel = (uint8_t)temp_data; + instance->agedata = (uint32_t)temp_data; + + if(!flipper_format_read_uint32(flipper_format, "Ch", (uint32_t*)&temp_data, 1)) { + FURI_LOG_E(TAG, "Missing Channel"); + break; + } + instance->channel = (uint8_t)temp_data; if(!flipper_format_read_uint32(flipper_format, "Btn", (uint32_t*)&temp_data, 1)) { FURI_LOG_E(TAG, "Missing Btn"); diff --git a/applications/plugins/weather_station/protocols/ws_generic.h b/applications/plugins/weather_station/protocols/ws_generic.h index b2a84df8e..7d0f198d5 100644 --- a/applications/plugins/weather_station/protocols/ws_generic.h +++ b/applications/plugins/weather_station/protocols/ws_generic.h @@ -29,6 +29,7 @@ struct WSBlockGeneric { uint8_t data_count_bit; uint8_t battery_low; uint8_t humidity; + uint32_t agedata; uint8_t channel; uint8_t btn; float temp; diff --git a/applications/plugins/weather_station/views/weather_station_receiver_info.c b/applications/plugins/weather_station/views/weather_station_receiver_info.c index 49b447f10..fb04317c5 100644 --- a/applications/plugins/weather_station/views/weather_station_receiver_info.c +++ b/applications/plugins/weather_station/views/weather_station_receiver_info.c @@ -1,3 +1,5 @@ +#include +#include #include "weather_station_receiver.h" #include "../weather_station_app_i.h" #include "weather_station_icons.h" @@ -70,6 +72,47 @@ void ws_view_receiver_info_draw(Canvas* canvas, WSReceiverInfoModel* model) { snprintf(buffer, sizeof(buffer), "Data: 0x%llX", model->generic->data); canvas_draw_str(canvas, 5, 32, buffer); + //DATA AGE + if((int) model->generic->agedata > 0){ + FuriHalRtcDateTime curr_dt; + furi_hal_rtc_get_datetime(&curr_dt); + uint32_t curr_ts = furi_hal_rtc_datetime_to_timestamp(&curr_dt); + + int diffold = (int) curr_ts - (int) model->generic->agedata; + + if(diffold>60){ + + int tmp_sec = diffold; + int cnt_min = 1; + for(int i=1; tmp_sec>60; i++){ + tmp_sec = tmp_sec - 60; + cnt_min = i; + } + + if ( curr_ts % 2 == 0){ + canvas_set_color(canvas, ColorBlack); + canvas_draw_rframe(canvas, 97, 23, 26, 11, 1); + canvas_set_color(canvas, ColorBlack); + canvas_draw_str_aligned(canvas, 109, 29, AlignCenter, AlignCenter, "OLD"); + }else{ + canvas_set_color(canvas, ColorBlack); + canvas_draw_rframe(canvas, 97, 23, 26, 11, 1); + canvas_draw_box(canvas, 97, 23, 26, 11); + canvas_set_color(canvas, ColorWhite); + snprintf(buffer, sizeof(buffer), "%dm", cnt_min); + canvas_draw_str_aligned(canvas, 109, 29, AlignCenter, AlignCenter, buffer); + } + + }else{ + canvas_set_color(canvas, ColorBlack); + canvas_draw_rframe(canvas, 97, 23, 26, 11, 1); + canvas_set_color(canvas, ColorBlack); + snprintf(buffer, sizeof(buffer), "%d", diffold); + canvas_draw_str_aligned(canvas, 109, 29, AlignCenter, AlignCenter, buffer); + } + } + //DATA AGE end + elements_bold_rounded_frame(canvas, 2, 37, 123, 25); canvas_set_font(canvas, FontPrimary);