From 21e5b66bf61e51e3b7ff2cfbab5a252d0ba225b6 Mon Sep 17 00:00:00 2001 From: LY2NEO Date: Sat, 3 Dec 2022 22:55:35 +0200 Subject: [PATCH 1/2] Improved plugin WS data dashbord, added data age counter. When data is read it saves datastamp and calculetes diference between actual time and data read time. Until one minute it counts age in seconds. After one minute it starts blink and counts age per minute. Tested with auriol_hg0601a.c protocol. --- .../protocols/acurite_592txr.c | 7 +++ .../weather_station/protocols/acurite_606tx.c | 7 +++ .../protocols/acurite_609txc.c | 7 +++ .../protocols/ambient_weather.c | 7 +++ .../protocols/auriol_hg0601a.c | 10 +++++ .../weather_station/protocols/gt_wt_02.c | 6 +++ .../weather_station/protocols/gt_wt_03.c | 7 +++ .../weather_station/protocols/infactory.c | 7 +++ .../protocols/lacrosse_tx141thbv2.c | 7 +++ .../weather_station/protocols/nexus_th.c | 7 +++ .../weather_station/protocols/thermopro_tx4.c | 7 +++ .../weather_station/protocols/ws_generic.c | 18 ++++++-- .../weather_station/protocols/ws_generic.h | 1 + .../views/weather_station_receiver_info.c | 43 +++++++++++++++++++ 14 files changed, 138 insertions(+), 3 deletions(-) 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); From 8d9786f89a302d87976c953cba70934c6163f529 Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Sun, 4 Dec 2022 04:38:37 +0300 Subject: [PATCH 2/2] Simplify and fix time display display only OLD when we have more than 59 mins --- .../protocols/acurite_592txr.c | 7 -- .../weather_station/protocols/acurite_606tx.c | 7 -- .../protocols/acurite_609txc.c | 7 -- .../protocols/ambient_weather.c | 7 -- .../protocols/auriol_hg0601a.c | 10 --- .../weather_station/protocols/gt_wt_02.c | 6 -- .../weather_station/protocols/gt_wt_03.c | 7 -- .../weather_station/protocols/infactory.c | 7 -- .../protocols/lacrosse_tx141thbv2.c | 7 -- .../weather_station/protocols/nexus_th.c | 7 -- .../weather_station/protocols/thermopro_tx4.c | 7 -- .../weather_station/protocols/ws_generic.c | 27 +++--- .../views/weather_station_receiver_info.c | 82 ++++++++++--------- 13 files changed, 60 insertions(+), 128 deletions(-) diff --git a/applications/plugins/weather_station/protocols/acurite_592txr.c b/applications/plugins/weather_station/protocols/acurite_592txr.c index 087ce1b52..5384a3c91 100644 --- a/applications/plugins/weather_station/protocols/acurite_592txr.c +++ b/applications/plugins/weather_station/protocols/acurite_592txr.c @@ -144,13 +144,6 @@ 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 8dfbe1363..4cb5d18b8 100644 --- a/applications/plugins/weather_station/protocols/acurite_606tx.c +++ b/applications/plugins/weather_station/protocols/acurite_606tx.c @@ -123,13 +123,6 @@ 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 89a168100..aeb0785eb 100644 --- a/applications/plugins/weather_station/protocols/acurite_609txc.c +++ b/applications/plugins/weather_station/protocols/acurite_609txc.c @@ -123,13 +123,6 @@ 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 3f19033ec..5ae22b790 100644 --- a/applications/plugins/weather_station/protocols/ambient_weather.c +++ b/applications/plugins/weather_station/protocols/ambient_weather.c @@ -160,13 +160,6 @@ 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 252565292..d5f89fc8b 100644 --- a/applications/plugins/weather_station/protocols/auriol_hg0601a.c +++ b/applications/plugins/weather_station/protocols/auriol_hg0601a.c @@ -1,6 +1,3 @@ -#include -#include - #include "auriol_hg0601a.h" #define TAG "WSProtocolAuriol_TH" @@ -136,13 +133,6 @@ 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 5edb1947c..cbe119192 100644 --- a/applications/plugins/weather_station/protocols/gt_wt_02.c +++ b/applications/plugins/weather_station/protocols/gt_wt_02.c @@ -135,12 +135,6 @@ 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 1e601e523..7831cf069 100644 --- a/applications/plugins/weather_station/protocols/gt_wt_03.c +++ b/applications/plugins/weather_station/protocols/gt_wt_03.c @@ -179,13 +179,6 @@ 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 978b837f2..2d444d981 100644 --- a/applications/plugins/weather_station/protocols/infactory.c +++ b/applications/plugins/weather_station/protocols/infactory.c @@ -148,13 +148,6 @@ 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 8837f730b..e4b612250 100644 --- a/applications/plugins/weather_station/protocols/lacrosse_tx141thbv2.c +++ b/applications/plugins/weather_station/protocols/lacrosse_tx141thbv2.c @@ -123,13 +123,6 @@ 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 132e38050..7d4a77aea 100644 --- a/applications/plugins/weather_station/protocols/nexus_th.c +++ b/applications/plugins/weather_station/protocols/nexus_th.c @@ -135,13 +135,6 @@ 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 29aaf0b35..0882bc33d 100644 --- a/applications/plugins/weather_station/protocols/thermopro_tx4.c +++ b/applications/plugins/weather_station/protocols/thermopro_tx4.c @@ -132,13 +132,6 @@ 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 f653a86a1..3a1c40726 100644 --- a/applications/plugins/weather_station/protocols/ws_generic.c +++ b/applications/plugins/weather_station/protocols/ws_generic.c @@ -99,11 +99,16 @@ 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; - } + //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); + + temp_data = curr_ts; + 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)) { @@ -174,17 +179,17 @@ bool ws_block_generic_deserialize(WSBlockGeneric* instance, FlipperFormat* flipp } instance->humidity = (uint8_t)temp_data; - if(!flipper_format_read_uint32(flipper_format, "Old", (uint32_t*)&temp_data, 1)) { + if(!flipper_format_read_uint32(flipper_format, "Old", (uint32_t*)&temp_data, 1)) { FURI_LOG_E(TAG, "Missing agedata"); break; } 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, "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/views/weather_station_receiver_info.c b/applications/plugins/weather_station/views/weather_station_receiver_info.c index fb04317c5..e5c1be42a 100644 --- a/applications/plugins/weather_station/views/weather_station_receiver_info.c +++ b/applications/plugins/weather_station/views/weather_station_receiver_info.c @@ -1,5 +1,3 @@ -#include -#include #include "weather_station_receiver.h" #include "../weather_station_app_i.h" #include "weather_station_icons.h" @@ -72,46 +70,54 @@ 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); + //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; + int diffold = (int)curr_ts - (int)model->generic->agedata; - if(diffold>60){ + 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(cnt_min >= 59) { + } - 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 { + if(cnt_min >= 59) { + 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); + } + } - 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 + } 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);