From 81d16343a74b33393c8d4146e01e2250f077bdce Mon Sep 17 00:00:00 2001 From: Edward Firmo <94725493+edwardtfn@users.noreply.github.com> Date: Tue, 12 Sep 2023 20:06:58 +0200 Subject: [PATCH] Media Player control You will be able to add a Media Player entity to any of the buttons pages and with a long press you will see the media player page. --- nspanel_blueprint.yaml | 104 +++++--------- nspanel_esphome.yaml | 179 +++++++++++++++++------- nspanel_esphome_addon_climate_cool.yaml | 13 -- nspanel_esphome_addon_climate_heat.yaml | 13 -- nspanel_eu.HMI | Bin 20387572 -> 20387572 bytes nspanel_eu.tft | Bin 7461764 -> 7464032 bytes nspanel_eu_code/media_player.txt | 76 +++++++++- nspanel_us.HMI | Bin 20870573 -> 20870573 bytes nspanel_us.tft | Bin 7534604 -> 7536892 bytes nspanel_us_code/media_player.txt | 76 +++++++++- nspanel_us_land.HMI | Bin 20387572 -> 20387572 bytes nspanel_us_land.tft | Bin 7461764 -> 7464032 bytes nspanel_us_land_code/media_player.txt | 80 ++++++++++- 13 files changed, 390 insertions(+), 151 deletions(-) diff --git a/nspanel_blueprint.yaml b/nspanel_blueprint.yaml index 3dc39b4..105b9c5 100644 --- a/nspanel_blueprint.yaml +++ b/nspanel_blueprint.yaml @@ -7236,6 +7236,10 @@ action: repeat.item.entity.split(".") | default([]) | count > 0 }} then: + #- service: homeassistant.update_entity + # data: + # entity_id: '{{ repeat.item.entity }}' + # continue_on_error: true - variables: item_domain: '{{ repeat.item.entity.split(".")[0] | default("unknown") }}' current_entity_state: '{{ states(repeat.item.entity) | default("unavailable") }}' @@ -7615,77 +7619,35 @@ action: sequence: &refresh_page_media_player - variables: media_player_entity: '{{ nspanel_event.entity if nspanel_event is defined and nspanel_event.entity is defined else trigger.entity_id }}' - - service: homeassistant.update_entity - data: - entity_id: '{{ nspanel_event.entity }}' - continue_on_error: true - - delay: - milliseconds: 500 - - variables: - media_player: - state: '{{ states(media_player_entity) }}' - is_volume_muted: '{{ state_attr(media_player_entity, "is_volume_muted") | default(false) }}' - friendly_name: '{{ state_attr(media_player_entity, "friendly_name") | default("Media player") }}' - volume_level: '{{ (state_attr(media_player_entity, "volume_level") | round(2, default=0) * 100) | int(0) }}' - media_title: '{{ state_attr(media_player_entity, "media_title") }}' - media_artist: '{{ state_attr(media_player_entity, "media_artist") }}' - media_album_name: '{{ state_attr(media_player_entity, "media_album_name") }}' - media_duration: '{{ state_attr(media_player_entity, "media_duration") | int(0) }}' - media_position: '{{ state_attr(media_player_entity, "media_position") | int(0) }}' - media_position_updated_at: '{{ state_attr(media_player_entity, "media_position_updated_at") }}' - supported_features: '{{ state_attr(media_player_entity, "supported_features") | int(0) }}' - feature: - PAUSE: 1 - SEEK: 2 - VOLUME_SET: 4 - VOLUME_MUTE: 8 - PREVIOUS_TRACK: 16 - NEXT_TRACK: 32 - reserved: 64 - TURN_ON: 128 - TURN_OFF: 256 - PLAY_MEDIA: 512 - VOLUME_STEP: 1024 - SELECT_SOURCE: 2048 - STOP: 4096 - CLEAR_PLAYLIST: 8192 - PLAY: 16384 - SHUFFLE_SET: 32768 - SELECT_SOUND_MODE: 65536 - BROWSE_MEDIA: 131072 - REPEAT_SET: 262144 - GROUPING: 524288 - MEDIA_ANNOUNCE: 1048576 - MEDIA_ENQUEUE: 2097152 - position_int: '{{ 0 if media_player.media_duration <= 0 else (100*(media_player.media_position)/(media_player.media_duration)) | round(0, default=0) }}' - position_str: '{{ "" if media_player.media_duration <= 0 else timedelta(seconds=position_int) }}' - duration_str: '{{ "" if media_player.media_duration <= 0 else timedelta(seconds=(media_player.media_duration)) }}' - - service: '{{ nextion.command.media_player }}' - data: - entity: '{{ media_player_entity }}' - state: '{{ media_player.state }}' - page_title: '{{ media_player.friendly_name }}' - track: '{{ media_player.media_title }}' - artist: '{{ media_player.media_artist }}' - bt_on_off: '{{ media_player.supported_features | bitwise_and(feature.TURN_ON) > 0 }}' - bt_prev: '{{ media_player.supported_features | bitwise_and(feature.PREVIOUS_TRACK) > 0 }}' - bt_play_pause: '{{ 2 if media_player.state == "playing" else (1 if media_player.state == "paused" else 0)}}' - bt_stop: '{{ media_player.supported_features | bitwise_and(feature.STOP) > 0 }}' - bt_next: '{{ media_player.supported_features | bitwise_and(feature.NEXT_TRACK) > 0 }}' - time_current: '{{ media_player.media_position }}' - time_total: '{{ media_player.media_duration }}' - time_progress: '{{ 0 if media_player.media_duration <= 0 else (100*media_player.media_position/media_player.media_duration) | round(0, default=0) }}' - volume: '{{ media_player.volume_level }}' - bt_mute: '{{ 1 if media_player.is_volume_muted else 2 }}' - bt_vol_down: '{{ media_player.supported_features | bitwise_and(feature.VOLUME_SET) > 0 }}' - bt_vol_up: '{{ media_player.supported_features | bitwise_and(feature.VOLUME_SET) > 0 }}' - continue_on_error: true - - delay: - milliseconds: 500 - - service: homeassistant.update_entity - data: - entity_id: '{{ nspanel_event.entity }}' - continue_on_error: true + - alias: Refresh page in a loop + repeat: + sequence: + - &update_entity + service: homeassistant.update_entity + data: + entity_id: '{{ nspanel_event.entity }}' + continue_on_error: true + - delay: + milliseconds: 500 + - service: '{{ nextion.command.media_player }}' + data: + entity: '{{ media_player_entity }}' + state: '{{ states(media_player_entity) }}' + is_volume_muted: '{{ state_attr(media_player_entity, "is_volume_muted") | default(false) }}' + friendly_name: '{{ state_attr(media_player_entity, "friendly_name") | default("Media player") }}' + volume_level: '{{ (state_attr(media_player_entity, "volume_level") | round(2, default=0) * 100) | int(0) }}' + media_title: '{{ state_attr(media_player_entity, "media_title") }}' + media_artist: '{{ state_attr(media_player_entity, "media_artist") }}' + media_duration: '{{ state_attr(media_player_entity, "media_duration") | int(0) }}' + media_position: '{{ state_attr(media_player_entity, "media_position") | int(0) }}' + #media_position_updated_at: '{{ state_attr(media_player_entity, "media_position_updated_at") }}' + supported_features: '{{ state_attr(media_player_entity, "supported_features") | int(0) }}' + continue_on_error: true + - delay: 10 + until: + - not: + - '{{ states(currentpage) == page.media_player }}' # Do not change this to `page.current` as this have to be reloaded every time + - '{{ nspanel_event.type == "page_changed"}}' ## PAGE ALARM ## - alias: Alarm settings page diff --git a/nspanel_esphome.yaml b/nspanel_esphome.yaml index 1c2b602..d90e319 100644 --- a/nspanel_esphome.yaml +++ b/nspanel_esphome.yaml @@ -457,7 +457,7 @@ api: id(home_time_color) = time_color; // Embedded thermostat - id(addon_climate_global_settings)->execute(embedded_climate); + id(is_embedded_thermostat) = embedded_climate; // Indoor temperature id(embedded_indoor_temp) = embedded_indoor_temperature; @@ -707,61 +707,139 @@ api: variables: entity: string state: string - page_title: string - track: string - artist: string - bt_on_off: int - bt_prev: bool - bt_play_pause: int - bt_stop: bool - bt_next: bool - time_current: int - time_total: int - time_progress: int - volume: int - bt_mute: int - bt_vol_down: bool - bt_vol_up: bool + is_volume_muted: bool + friendly_name: string + volume_level: int + media_title: string + media_artist: string + media_duration: int + media_position: int + supported_features: int then: - lambda: |- ESP_LOGV("service.media_player", "Starting"); if (id(current_page).state == "media_player") { id(disp1).set_component_text_printf("entity", "%s", entity.c_str()); - id(disp1).set_component_text_printf("page_title", "%s", page_title.c_str()); - id(display_wrapped_text).execute("track", track.c_str(), id(display_mode) == 2 ? 15 : 23); - id(display_wrapped_text).execute("artist", artist.c_str(), id(display_mode) == 2 ? 26 : 40); - if (bt_on_off > 0) + id(disp1).set_component_text_printf("page_label", "%s", friendly_name.c_str()); + id(display_wrapped_text).execute("track", media_title.c_str(), id(display_mode) == 2 ? 15 : 27); + id(display_wrapped_text).execute("artist", media_artist.c_str(), id(display_mode) == 2 ? 26 : 40); + // states: + // OFF: Entity is turned off and is not accepting commands until turned on. + // ON: Entity is turned on, but no details on its state is currently known. + // IDLE: Entity is turned on and accepting commands, but currently not playing any media. Possibly at some idle home screen. + // PLAYING: Entity is currently playing media. + // PAUSED: Entity has an active media and is currently paused + // STANDBY: Entity is in a low power state, accepting commands. + // BUFFERING: Entity is preparing to start playback of some media + // feature: + // PAUSE: 1 + // SEEK: 2 + // VOLUME_SET: 4 + // VOLUME_MUTE: 8 + // PREVIOUS_TRACK: 16 + // NEXT_TRACK: 32 + // reserved: 64 + // TURN_ON: 128 + // TURN_OFF: 256 + // PLAY_MEDIA: 512 + // VOLUME_STEP: 1024 + // SELECT_SOURCE: 2048 + // STOP: 4096 + // CLEAR_PLAYLIST: 8192 + // PLAY: 16384 + // SHUFFLE_SET: 32768 + // SELECT_SOUND_MODE: 65536 + // BROWSE_MEDIA: 131072 + // REPEAT_SET: 262144 + // GROUPING: 524288 + // MEDIA_ANNOUNCE: 1048576 + // MEDIA_ENQUEUE: 2097152 + + // on/off button + if (supported_features & 128 and state == "off") //TURN_ON { + id(set_component_color).execute("bt_on_off", { 65535 }, {} ); + id(disp1).show_component("bt_on_off"); + } + else if (supported_features & 256 and state != "off") //TURN_OFF + { + id(set_component_color).execute("bt_on_off", { 10597 }, {} ); id(disp1).show_component("bt_on_off"); - if (bt_on_off == 1) id(set_component_color).execute("bt_on_off", {255, 0, 0}, {} ); - else id(set_component_color).execute("bt_on_off", {0, 255, 0}, {} ); } else id(disp1).hide_component("bt_on_off"); - if (bt_prev) id(disp1).show_component("bt_prev"); else id(disp1).hide_component("bt_prev"); - if (bt_play_pause > 0) + + // play/pause button + if ((supported_features & 512 or supported_features & 16384) and state != "playing" and state != "off") //PLAY_MEDIA+PLAY { + id(disp1).set_component_text_printf("bt_play_pause", "%s", "\uE409"); // mdi:play + id(disp1).show_component("bt_play_pause"); + } + else if (supported_features & 1 and state == "playing" ) //PAUSE + { + id(disp1).set_component_text_printf("bt_play_pause", "%s", "\uE3E3"); // mdi:pause id(disp1).show_component("bt_play_pause"); - if (bt_play_pause == 1) id(disp1).set_component_text_printf("bt_play_pause", "%s", "\uE409"); // mdi:play - else id(disp1).set_component_text_printf("bt_play_pause", "%s", "\uE3E3"); // mdi:pause } else id(disp1).hide_component("bt_play_pause"); - if (bt_stop) id(disp1).show_component("bt_stop"); else id(disp1).hide_component("bt_stop"); - if (bt_next) id(disp1).show_component("bt_next"); else id(disp1).hide_component("bt_next"); - id(disp1).set_component_text_printf("time_current", "%i", time_current); - id(disp1).set_component_text_printf("time_total", "%i", time_total); - id(disp1).set_component_value("time_progress", time_progress); - id(disp1).set_component_text_printf("vol_text", "%i%", volume); - id(disp1).set_component_value("vol_slider", volume); - if (bt_mute > 0) + + // bt_prev button - PREVIOUS_TRACK + if (supported_features & 16 and state != "off") id(disp1).show_component("bt_prev"); else id(disp1).hide_component("bt_prev"); + // bt_next button - NEXT_TRACK + if (supported_features & 32 and state != "off") id(disp1).show_component("bt_next"); else id(disp1).hide_component("bt_next"); + + // Stop button - STOP + if (supported_features & 4096 and (state == "playing" or state == "paused")) id(disp1).show_component("bt_stop"); else id(disp1).hide_component("bt_stop"); + + // mute/unmute button - VOLUME_MUTE + id(disp1).set_component_value("is_muted", (is_volume_muted) ? 1 : 0); + if (supported_features & 8 and is_volume_muted) // unmute { + id(disp1).set_component_text_printf("bt_mute", "%s", "\uE57E"); // mdi:volume-low + id(disp1).show_component("bt_mute"); + } + else if (supported_features & 8) // mute + { + id(disp1).set_component_text_printf("bt_mute", "%s", "\uEE07"); // mdi:volume-variant-off id(disp1).show_component("bt_mute"); - if (bt_mute == 1) id(disp1).set_component_text_printf("bt_mute", "%s", "\uE57E"); // mdi:volume-low - else id(disp1).set_component_text_printf("bt_mute", "%s", "\uEE07"); // mdi:volume-variant-off } else id(disp1).hide_component("bt_mute"); - if (bt_vol_down) id(disp1).show_component("bt_vol_down"); else id(disp1).hide_component("bt_vol_down"); - if (bt_vol_up) id(disp1).show_component("bt_vol_up"); else id(disp1).hide_component("bt_vol_up"); + + // VOLUME_SET + if (supported_features & 4) + { + id(disp1).set_component_text_printf("vol_text", "%i%%", volume_level); + id(disp1).set_component_value("vol_slider", volume_level); + id(disp1).show_component("vol_slider"); + id(disp1).show_component("bt_vol_down"); + id(disp1).show_component("bt_vol_up"); + id(disp1).show_component("vol_text"); + } + else + { + id(disp1).hide_component("vol_slider"); + id(disp1).hide_component("bt_vol_down"); + id(disp1).hide_component("bt_vol_up"); + id(disp1).hide_component("vol_text"); + } + + if (media_duration > 0) + { + id(disp1).set_component_text_printf("time_current", "%i", media_position); + id(disp1).set_component_text_printf("time_total", "%i", media_duration); + id(disp1).set_component_value("prg_current", media_position); + id(disp1).set_component_value("prg_total", media_duration); + id(disp1).send_command_printf("prg_timer.en=%i", (state == "playing") ? 1 : 0); + id(disp1).show_component("time_current"); + id(disp1).show_component("time_total"); + id(disp1).show_component("time_progress"); + } + else + { + id(disp1).send_command_printf("prg_timer.en=0"); + id(disp1).hide_component("time_current"); + id(disp1).hide_component("time_total"); + id(disp1).hide_component("time_progress"); + } } ##### START - GLOBALS CONFIGURATION ##### @@ -773,6 +851,18 @@ globals: restore_value: true initial_value: '0' + ##### Entity Id of the entity displayed on the detailed pages + - id: entity_id + type: std::string + restore_value: no + initial_value: '' + + ##### Is embedded thermostat set as main climate entity? ##### + - id: is_embedded_thermostat + type: bool + restore_value: true + initial_value: 'false' + ##### Save Display Brightness for NSPanel reboot ##### - id: display_brightness_global type: int @@ -1303,7 +1393,7 @@ text_sensor: {"entity", entity} }); ESP_LOGV("text_sensor.localevent", "Call add-ons scripts for new page"); - id(addon_climate_set_climate).execute(page=="climate" and entity=="embedded_climate"); + id(addon_climate_set_climate).execute(page=="climate" and id(entity_id) == "embedded_climate"); ESP_LOGV("text_sensor.localevent", "Publish current_page sensor"); id(current_page).publish_state(page); ESP_LOGV("text_sensor.localevent", "Construct new page"); @@ -2197,7 +2287,7 @@ script: - id: check_versions mode: restart then: - - delay: 30s + - delay: 60s - lambda: |- ESP_LOGD("script.check_versions", "ESPHome version: ${version}"); ESP_LOGD("script.check_versions", "TFT version: %s", id(version_tft).c_str()); @@ -2239,15 +2329,6 @@ script: - lambda: |- ESP_LOGV("script.addon_climate_set_climate", "Check for addon_climate"); ESP_LOGV("script.addon_climate_set_climate", "embedded_climate: %i", (embedded_climate) ? 1 : 0); - - id: addon_climate_global_settings - mode: restart - parameters: - embedded_climate: bool - then: - # Reserved for Add-on Climate - - lambda: |- - ESP_LOGV("script.addon_climate_global_settings", "Check for addon_climate"); - ESP_LOGV("script.addon_climate_global_settings", "embedded_climate: %i", (embedded_climate) ? 1 : 0); - id: addon_climate_update_page_climate mode: restart then: diff --git a/nspanel_esphome_addon_climate_cool.yaml b/nspanel_esphome_addon_climate_cool.yaml index 5f627a1..7c0b096 100644 --- a/nspanel_esphome_addon_climate_cool.yaml +++ b/nspanel_esphome_addon_climate_cool.yaml @@ -55,11 +55,6 @@ climate: ###### All the code bellow this point is shared between addon_climate_cool and addon_climate_heat ##### globals: - ##### Is embedded thermostat set as main climate entity? ##### - - id: is_embedded_thermostat - type: bool - restore_value: true - initial_value: 'false' ##### Is embedded thermostat visible on climate page? ##### - id: is_addon_climate_visible type: bool @@ -113,14 +108,6 @@ script: id(is_addon_climate_visible) = embedded_climate; ESP_LOGV("script.addon_climate_set_climate", "Finished"); - - id: !extend addon_climate_global_settings - then: - - lambda: |- - ESP_LOGV("script.addon_climate_global_settings", "Starting"); - ESP_LOGV("script.addon_climate_global_settings", "embedded_climate: %i", (embedded_climate) ? 1 : 0); - id(is_embedded_thermostat) = embedded_climate; - ESP_LOGV("script.addon_climate_global_settings", "Finished"); - - id: !extend addon_climate_update_page_climate then: - lambda: |- diff --git a/nspanel_esphome_addon_climate_heat.yaml b/nspanel_esphome_addon_climate_heat.yaml index 9a6fc2c..52a2740 100644 --- a/nspanel_esphome_addon_climate_heat.yaml +++ b/nspanel_esphome_addon_climate_heat.yaml @@ -55,11 +55,6 @@ climate: ###### All the code bellow this point is shared between addon_climate_cool and addon_climate_heat ##### globals: - ##### Is embedded thermostat set as main climate entity? ##### - - id: is_embedded_thermostat - type: bool - restore_value: true - initial_value: 'false' ##### Is embedded thermostat visible on climate page? ##### - id: is_addon_climate_visible type: bool @@ -113,14 +108,6 @@ script: id(is_addon_climate_visible) = embedded_climate; ESP_LOGV("script.addon_climate_set_climate", "Finished"); - - id: !extend addon_climate_global_settings - then: - - lambda: |- - ESP_LOGV("script.addon_climate_global_settings", "Starting"); - ESP_LOGV("script.addon_climate_global_settings", "embedded_climate: %i", (embedded_climate) ? 1 : 0); - id(is_embedded_thermostat) = embedded_climate; - ESP_LOGV("script.addon_climate_global_settings", "Finished"); - - id: !extend addon_climate_update_page_climate then: - lambda: |- diff --git a/nspanel_eu.HMI b/nspanel_eu.HMI index 5db184dc2e8b6009204e47b717f313d4a432c2db..e7856d014d875b3ffd291633b01c30d71a49e77f 100644 GIT binary patch delta 6413 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 Y(q7U*5+~^>=_I+$v?br&*)&qU0;Pex)c^nh diff --git a/nspanel_eu.tft b/nspanel_eu.tft index b64f172ee2482cad21e3b4974480dba4280ca0cf..061a4af771688e8c085bcb6ae0b2e80431d003bb 100644 GIT binary patch delta 10191 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

Z%yZu?+Wb`sg zQ;?>@x+e+)N{jSx;eeVfC5Jlz_>S=)fCU0zhHj<+n8g947m$X)e{WKg@dH&gc${pK zNN_XkX;Mwn!6tb3eRaP_K{Ez!hSFv=Rw`(QBhBjmUSrQm#L^-W8AnMAEI)_#W6!|{ z=hVy6?iN_nf`0o@XKICst!k`+U)$|(kPS$oIj=ATpjEAt5A?~1TK?i)_uEzG_*LJ&shEuye zl9uKKLE#65$*`zHT`zsy0Y7)Bm%XbxxXoDlH0l!};!Ab4RMP>wzEt~5dpqFFm+D>* LyZz3q;T!%32!pqK delta 9998 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 diff --git a/nspanel_eu_code/media_player.txt b/nspanel_eu_code/media_player.txt index 70a3b7e..77ec8e9 100644 --- a/nspanel_eu_code/media_player.txt +++ b/nspanel_eu_code/media_player.txt @@ -74,6 +74,18 @@ Variable (int32) is_muted Scope: local Value: 0 +Variable (int32) prg_current + Attributes + ID : 27 + Scope: local + Value: 0 + +Variable (int32) prg_total + Attributes + ID : 28 + Scope: local + Value: 0 + Text page_label Attributes ID : 1 @@ -102,7 +114,7 @@ Text vol_text Send Component ID : disabled Associated Keyboard: none Text : - Max. Text Size : 10 + Max. Text Size : 5 Text bt_vol_down Attributes @@ -424,3 +436,65 @@ Timer timer0 printh 00 printh FF FF FF +Timer prg_timer + Attributes + ID : 26 + Scope : local + Period (ms): 1000 + Enabled : no + + Events + Timer Event + if(prg_current.val0) + { + prg_current.val++ + time_progress.val=100*prg_current.val/prg_total.val + covx prg_current.val,time_current.txt,0,0 + } + // Progress - Total + sys0=prg_total.val/3600 //hours + sys2=prg_total.val%3600 //remainder + sys1=sys2/60 //minutes + sys2%=60 //seconds + time_total.txt="" + if(sys0>0) + { + covx sys0,time_total.txt,0,0 + time_total.txt+=":" + if(sys1<10) + { + time_total.txt+="0" + } + } + covx sys1,va0.txt,0,0 + time_total.txt+=va0.txt+":" + if(sys2<10) + { + time_total.txt+="0" + } + covx sys2,va0.txt,0,0 + time_total.txt+=va0.txt + // Progress - Current + sys0=prg_current.val/3600 //hours + sys2=prg_current.val%3600 //remainder + sys1=sys2/60 //minutes + sys2%=60 //seconds + time_current.txt="" + if(sys0>0) + { + covx sys0,time_current.txt,0,0 + time_current.txt+=":" + if(sys1<10) + { + time_current.txt+="0" + } + } + covx sys1,va0.txt,0,0 + time_current.txt+=va0.txt+":" + if(sys2<10) + { + time_current.txt+="0" + } + covx sys2,va0.txt,0,0 + time_current.txt+=va0.txt + diff --git a/nspanel_us.HMI b/nspanel_us.HMI index 55bb4c223855917957bbcbf6e253c2099bb348cf..8032f8589c6852c03d876143b7b2c6768e22ba57 100644 GIT binary patch delta 4014 zcmeI!dzegR90%}sX7<9m?2xh6C1+=?hS|*QVso3dE+wff$)&J1mfhM5GqW>T+fjbm zq9W9bRMb{VDs7sCb(auAMM{)HDof>B>H9l#wssd?p8lwwr+J>wci%bZy`6c_d(JLC zcDDLrFkH37;53>xM;l7o7|oHLBX1YNP}V<8gikhcnLqq@=V`x)H{e`pv_Zf|)LD-@ z9R~~X^BKQr7lCs^l#HtLP-yJNp=h;!fDmQ*p|j(PjoNn{+M1_|%xb8(VL(Y#l%;ye zksap^GgF&>JjoVQWQ#F?5lj#Qp%50Z#f0zK{~wv=B(tr^Y%_onOb`O05Ed}o!plDV zH&iGw+fp}CJ8DlIs3UbE7bR0?N}(>)mAX-Px|Xh^9&|nRq#LLg-AFgl&D5JxsSov~ zTc{u1O8sd74WvPI8{JNWX$TFaG#WND_Fd-(Jg5??2g(%d^k+p<~ zKt29M*A~L0mm5b4aZYbrzn&12^zxhrLX6eh)@dw6zJ7eN@>}_QGa=T62vzH}w1p5a z8nvRxj2B{p-uRG1i1B)PXlpdq%e#_<@ag5A9fZi#2UwCU#GQJ%Q8yum>g91ggczZh zKj|gJV7=Tv6+0$Oznac{gjlGT5BC)!R-aJBt(cg8Jfgo4HT1FtZOiMg94JI>{rHwa z_$B3ur4xGxO6#gOM$7rTpS8#XeF}1odyVERhG z&lKp{R-F|Qte;YQ-y)eZ*EdV{w(he?rK1`e=+#B7Y5cXjfih*y1iLgZ@T~|e>aJ3( zJl=OoHMwfqzLtiDGN!4wo@umulr+px=c-AGxQ48eHXKMBp6_;NXmxjdEvrJlu&Z!Rc&SrLv<+P#+WEKl0#?DTPR!IQ6zk*n7g-z2TOJavoAXZpxjZ*P&b&|pViytc}>$h|}UZChljoL=USRNE&0qZ>tal;70ahWwKo zrImNAH{KcVxu1SET_Qt&^Ni#o@@z%XfQX1)j#J zlUTVSc!FE-No;x8OrO1}FHp(w3~kgT2zi#sw<{*R?{Wi&vK4 z#{3KX*`?*1O`CFgua{k11vM{P+X}6Cb))#d0e!71oci4bj@J6UWTQ(j@kJ}#q{20* z+KUkvVR!w(A_s4*s@IOG{?Rh?gfDKUk0zI7`>**+ue_ONTZBCDa6yQC>PvSYxqX?x ze&Cg({_)15JPA+1d{_Wa!!u9}&%$%?JS>D4;6+#jFTrAX8D4=`VF|njCGa{dg*PAo zZ^ANo3zowQSP7-D3Rc4!SPSc5J#2uD@HT9McVIJYfvxZ^Y=iBv1Kxw3unTs>`|tsL z2zy{Jd<6U8WB3I2!>4cn4#H>fIUIs7;7d3RN8l)Y1;^lP_y)d(<4^`C;3Rwp-@^}Z z3QofrI1A_CJp2eh!Ow7E>T<5SC>${yR*qPXW*l)G%{i{(uyM5D zXvtyci08PPqZNmP!^x4rk;u`SqYXz}jwFt2INEWv=jg!Ek)sob%dl#>JK1p3_zOjr B8uI`E delta 2431 zcmeIxYg80<7{~EvZxA55XqzaRASg?yASfXMAz7N5pomzZqG=H&Dz_zs7UD@N#7k&X zNNRVrNDXZ=EJVb#D2Xmun$nF-#0zAiX7+n&f13lf1o{dgBOB)6pF0^_TS-o_i2Ll+v z1P-dz%kkimYw?;2&DJ8bRR?-7fDugKpqj0Yr<<;Y1(jxN>^=_VksQXOIGiIml5gcG z9?j8w8;{}J`3@e-V<&l7ke-^G(ShGTg$PvJP8%JDpn6L>n`&G+!VoX9hHCePv| zp3QUkKAy|-_qE=@h&JiFMjA7iC|BFOD}X3Ro5O;!S(`V95M^oe zz%Zg@?F&jGiBh!rTr|;4ZH^yHG*_EeH<&o(IYN7yebYc8f) z)NVm?+!=`DlS{KKYUFNPzSCbjqm>o?^Wv1KvaD4~%z#4{HD$EjO@GztsG3}Vwc&s* z%BR$9by1p^EjB9Vz4^InbxmG%cV$-JMUF)ghHQ8Qa$qs!LLNM-Mi}h-U0vf&g#`V7 z>;HpWpVITHd-tzzt#YZ;=B%{VXBDe~t+swT9V;u7?8B6{H2Y9vdd7lhkPi2$Dj}x9)~4R1W&+|@DvooQYe9CupCyvN_ZMd zVHK=~XF!2x;W;RSHBb)E!&+De>){1>5nh6q;T3olUV{y=5jMf=@CH=Co3I(Sz*cw* zDq$OJhqpn6cVGv+3stZa-h=m{8g@Yq?1oy{19h+$K7f6&A3lVSpdLPkPv8JFz^Bj% zpTXzw1$+rja1g$Nui+3JhHu~q9EE217QTb;;RpB;THq%*20z1bXoVBd1}EVZoQ5;d z4ju3doP}TE9CX5YxBwU7H@F19!{y?tG~IHL=p_b;QDTxfNE{{CNt`6k5*JA~iL0c$ zq=&>Tag+3v^padJu}E%^^p?0w`bhdpJR~bYNvLF`Bup|&5-y3*Rad1&>e}^x09Ff2 Ang9R* diff --git a/nspanel_us.tft b/nspanel_us.tft index 39d31b8f9d2fcab0d4951dc3bdba4801541c3302..938312a083bb8dbbf5adef41d688394c3293acfb 100644 GIT binary patch delta 9686 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 PWiLNjXqnUh(31ZF&L3~B diff --git a/nspanel_us_code/media_player.txt b/nspanel_us_code/media_player.txt index 70a3b7e..77ec8e9 100644 --- a/nspanel_us_code/media_player.txt +++ b/nspanel_us_code/media_player.txt @@ -74,6 +74,18 @@ Variable (int32) is_muted Scope: local Value: 0 +Variable (int32) prg_current + Attributes + ID : 27 + Scope: local + Value: 0 + +Variable (int32) prg_total + Attributes + ID : 28 + Scope: local + Value: 0 + Text page_label Attributes ID : 1 @@ -102,7 +114,7 @@ Text vol_text Send Component ID : disabled Associated Keyboard: none Text : - Max. Text Size : 10 + Max. Text Size : 5 Text bt_vol_down Attributes @@ -424,3 +436,65 @@ Timer timer0 printh 00 printh FF FF FF +Timer prg_timer + Attributes + ID : 26 + Scope : local + Period (ms): 1000 + Enabled : no + + Events + Timer Event + if(prg_current.val0) + { + prg_current.val++ + time_progress.val=100*prg_current.val/prg_total.val + covx prg_current.val,time_current.txt,0,0 + } + // Progress - Total + sys0=prg_total.val/3600 //hours + sys2=prg_total.val%3600 //remainder + sys1=sys2/60 //minutes + sys2%=60 //seconds + time_total.txt="" + if(sys0>0) + { + covx sys0,time_total.txt,0,0 + time_total.txt+=":" + if(sys1<10) + { + time_total.txt+="0" + } + } + covx sys1,va0.txt,0,0 + time_total.txt+=va0.txt+":" + if(sys2<10) + { + time_total.txt+="0" + } + covx sys2,va0.txt,0,0 + time_total.txt+=va0.txt + // Progress - Current + sys0=prg_current.val/3600 //hours + sys2=prg_current.val%3600 //remainder + sys1=sys2/60 //minutes + sys2%=60 //seconds + time_current.txt="" + if(sys0>0) + { + covx sys0,time_current.txt,0,0 + time_current.txt+=":" + if(sys1<10) + { + time_current.txt+="0" + } + } + covx sys1,va0.txt,0,0 + time_current.txt+=va0.txt+":" + if(sys2<10) + { + time_current.txt+="0" + } + covx sys2,va0.txt,0,0 + time_current.txt+=va0.txt + diff --git a/nspanel_us_land.HMI b/nspanel_us_land.HMI index 328de8f574a7d22efef5310afc733091e322ad6c..cd07af25c28bbbb4d6afca9b886f308cdf9d2ec5 100644 GIT binary patch delta 5329 zcmeH~d3aRS8OG17NC+fBW(b6Yo3NNLaW*6pNLY#}7&H)e34sVPjF4nHGl>&II=SSS zsECjRJVGl{7DXuvjc~CbimOGdE-bthUdi{e$y7zxST) z`@XZy$;tT*$J?Ft>1gYK~^sc*mxqgVm)rhd$2`z)UDPotQ)6^9JY8!$dzlMuhiAF@9%V4-MOkEefCc9vwbHdDOn4t1l_{BrSFw2mV7qTy{n6--+PM8qQ=I!;sE^U{ z0=vH*`OmCx6XVkA$G%+^TN^h=zwAg-eqBZUWBS!2#vG_~$3^Rh*H}hVrgBYO^_n;h z&;lLM0|PKBYvS5Gefs9{2(9hS<8htik$t){GO;=`Q3JF<2lT)Ij7nr;n}(zR4;|_w z6GtE5{dp=Mzz6a)p3VpH!F&iG%74U%@w@nNemB2|kKiNuy*z`D;`j0Uc_tst$M7sZ zmXG7(`2;?ZPvVpL1AGe4=2LkNpT?*2T>c=R!DsS3{t(aSv$%^t%xCjCynq+-qF3FE zhbXw{RvHvsS?vsB=v4R8>cbgs@MGWsUf=`8paeXk9M1569@c(u&)7V=divw+#fscZ z6_!A@hOv$M&{+&OGFGJvkDdjBPIn|R_7bjjO0$v~o2MFoWMgcun$PJAV>SO?3S%W| zek3lhS!#eygBW{Q&BqL5EJw|k-ow~THGd+5v1~P;IvTg2QJu};F^sKK^JlUc>!A)P zY&=G#)`v}Cteu)S!FC$`Q9$x#GuA<^pFfqca8Z-$%~Zm_suex5T};= z1_}3W-x86dTW1zIUfC$l70NG*oP7(8!t9gN#D_()S>sSNw*~YXK<_Sl#Y-zGpPFDG2 zni(mPRyn$>khZKd3gbXIOPuqTnYY|2Cuo(e_sVMp%>2_%x4ZAz4y`^4zdW!(IzA1LQWV6jGD)xALF#IOa$Jw$^FSU;+kKQ~p z^E~E|D@Qu@wWW}Kfvd3Cm*?#mYH{{T57v6~W)v09^hTjJINZ?sVX)~531O(jGSiS6 zmoJXuOHy#UR3Dn-RU?|A309KS(wQYaVL$?|2{eQpI?^2WB>IU;Qd#HV=Q<|#giw$2 z;G&UViW`s+*pXb4YqzRv8iSVB@ziDu;^JwdPQyu2gU8?ogS02K2t|>c%_GrJ12+go zE?aKuu+Z6zM+2=@aLXEx0}fY&%^?u{y<-xV^#8EQp@VhZsNcNJ zG~jE^)M(h-pRJF>Go1bTQh@q3q zT-6sh`#~v~3(CMeP!4_q0?NhB6;p=m?>hLvDkYF5zuCRjrLGL4z*78a69iIwf_a=YZx4mfU@NbWDD84jXBPuF*s&X#6w9+beP4u1-<7QX(sos84 z2J=BB;L7%sk2)gsQO@IQzvE@&vWnf-s`Kzt z5?Bv@0XBe_!7E@R*aUtF>cOjEGuQ$Yuob)peg(FH?cjB=1MCF5z;5sc*aLnI_JVz2 zKR5smf;Yii;5XoHa0vVs90u=zcfot$ci;$k9~=cAfZu~-;1A$9H~~(A55XyL8vGIb z348?p3_b>Dz+b>8;8XBd@HcQ4{2iPF4d65I5AaWL9()cifPaB6z(w#SxCAbPufV^- zl?Al{%_2aeCDD=SNem=Lk~So_khCQUBWXtxPST#F14#r)BuNxWN0M7fI+2)2%p{#j zqDi`tbR~%)=|&Pu5=YXVL?VeNNg(M#(vzeYNpF(dND@hsNcxaiNRmlzC$W;)NbDpI V5+_Mtk~>KHX?E5IQZx^WuK{xKs4xHk delta 3777 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 delta 10036 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 diff --git a/nspanel_us_land_code/media_player.txt b/nspanel_us_land_code/media_player.txt index afbddc0..77ec8e9 100644 --- a/nspanel_us_land_code/media_player.txt +++ b/nspanel_us_land_code/media_player.txt @@ -74,6 +74,18 @@ Variable (int32) is_muted Scope: local Value: 0 +Variable (int32) prg_current + Attributes + ID : 27 + Scope: local + Value: 0 + +Variable (int32) prg_total + Attributes + ID : 28 + Scope: local + Value: 0 + Text page_label Attributes ID : 1 @@ -102,7 +114,7 @@ Text vol_text Send Component ID : disabled Associated Keyboard: none Text : - Max. Text Size : 10 + Max. Text Size : 5 Text bt_vol_down Attributes @@ -118,7 +130,7 @@ Text bt_vol_down Touch Release Event if(vol_slider.val>0) { - vol_slider.val++ + vol_slider.val-- covx vol_slider.val,va0.txt,0,0 vol_text.txt=va0.txt+"%" timer0.en=1 @@ -144,7 +156,7 @@ Text bt_vol_up Touch Release Event if(vol_slider.val<100) { - vol_slider.val-- + vol_slider.val++ covx vol_slider.val,va0.txt,0,0 vol_text.txt=va0.txt+"%" timer0.en=1 @@ -424,3 +436,65 @@ Timer timer0 printh 00 printh FF FF FF +Timer prg_timer + Attributes + ID : 26 + Scope : local + Period (ms): 1000 + Enabled : no + + Events + Timer Event + if(prg_current.val0) + { + prg_current.val++ + time_progress.val=100*prg_current.val/prg_total.val + covx prg_current.val,time_current.txt,0,0 + } + // Progress - Total + sys0=prg_total.val/3600 //hours + sys2=prg_total.val%3600 //remainder + sys1=sys2/60 //minutes + sys2%=60 //seconds + time_total.txt="" + if(sys0>0) + { + covx sys0,time_total.txt,0,0 + time_total.txt+=":" + if(sys1<10) + { + time_total.txt+="0" + } + } + covx sys1,va0.txt,0,0 + time_total.txt+=va0.txt+":" + if(sys2<10) + { + time_total.txt+="0" + } + covx sys2,va0.txt,0,0 + time_total.txt+=va0.txt + // Progress - Current + sys0=prg_current.val/3600 //hours + sys2=prg_current.val%3600 //remainder + sys1=sys2/60 //minutes + sys2%=60 //seconds + time_current.txt="" + if(sys0>0) + { + covx sys0,time_current.txt,0,0 + time_current.txt+=":" + if(sys1<10) + { + time_current.txt+="0" + } + } + covx sys1,va0.txt,0,0 + time_current.txt+=va0.txt+":" + if(sys2<10) + { + time_current.txt+="0" + } + covx sys2,va0.txt,0,0 + time_current.txt+=va0.txt +