diff --git a/nspanel_blueprint.yaml b/nspanel_blueprint.yaml index 46e14af..fe76935 100644 --- a/nspanel_blueprint.yaml +++ b/nspanel_blueprint.yaml @@ -7934,7 +7934,8 @@ action: media_title: '{{ media_player.media_title if media_player.media_title is string and media_player.media_title not in [null, None, "unknown", "unavailable"] else "" }}' media_artist: '{{ media_player.media_artist if media_player.media_artist is string and media_player.media_artist not in [null, None, "unknown", "unavailable"] else "" }}' media_duration: '{{ media_player.media_duration }}' - media_position: '{{ min(media_player.media_duration, media_player.media_position + (now() | as_timestamp - media_player.media_position_updated_at | as_timestamp | default(now() | as_timestamp))) }}' + media_position: '{{ media_player.media_position }}' #min(media_player.media_duration, media_player.media_position + (now() | as_timestamp - media_player.media_position_updated_at | as_timestamp | default(now() | as_timestamp))) }}' + media_position_delta: '{{ (now() | as_timestamp - media_player.media_position_updated_at | as_timestamp | default(now() | as_timestamp)) }}' supported_features: '{{ media_player.supported_features }}' continue_on_error: true - wait_template: '{{ states(currentpage) != page.media_player }}' diff --git a/nspanel_esphome.yaml b/nspanel_esphome.yaml index cc66bb5..3a3b4fb 100644 --- a/nspanel_esphome.yaml +++ b/nspanel_esphome.yaml @@ -728,8 +728,9 @@ api: volume_level: int media_title: string media_artist: string - media_duration: int - media_position: int + media_duration: float + media_position: float + media_position_delta: float supported_features: int then: - lambda: |- @@ -845,7 +846,12 @@ api: if (media_duration > 0) { - id(disp1).set_component_value("prg_current", media_position); + if (media_duration != id(last_media_duration) or media_position != id(last_media_position)) + { + id(last_media_duration) = media_duration; + id(last_media_position) = media_position; + id(disp1).set_component_value("prg_current", int(round(min(media_position + media_position_delta, media_duration)))); + } 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"); @@ -870,6 +876,18 @@ globals: restore_value: false initial_value: '-1' + ###### Last duration from Home Assistant ###### + - id: last_media_duration + type: int + restore_value: false + initial_value: '-1' + + ###### Last duration from Home Assistant ###### + - id: last_media_position + type: int + restore_value: false + initial_value: '-1' + ###### Relay fallback even when buttons have other entities? ###### - id: relay_1_fallback type: bool @@ -1256,7 +1274,12 @@ text_sensor: then: - lambda: |- if (x != "climate" and x != "cover" and x != "fan" and x != "light" and x != "media_player" and x != "confirm" and x != "keyb_num") id(entity_id) = ""; - if (x != "media_player") id(last_volume_level) = -1; + if (x != "media_player") + { + id(last_volume_level) = -1; + id(last_media_duration) = -1; + id(last_media_position) = -1; + } ESP_LOGD("text_sensor.current_page", "New page: %s", x.c_str()); if (!id(entity_id).empty()) ESP_LOGD("text_sensor.current_page", "Entity shown: %s", id(entity_id).c_str()); id(timer_reset_all).execute(x.c_str());