infra/roles/hass-core/files/packages/md.yaml

337 lines
11 KiB
YAML

homeassistant:
customize:
package.node_anchors:
package_name: &package_name "md"
common_attrs: &common_attrs
package: *package_name
templated: true
sensor.md_audio_owntone_now_playing:
friendly_name: "audio_owntone_now_playing.md"
<<: *common_attrs
sensor.md_audio_sonos_favs:
friendly_name: "audio_sonos_favs.md"
source_id_s1: "sensor.sonos_favorites_s1"
source_id_s2: "sensor.sonos_favorites_s2"
<<: *common_attrs
sensor.md_audio_owntone_media_players:
friendly_name: "audio_owntone_media_players.md"
<<: *common_attrs
sensor.md_packages:
friendly_name: "packages.md"
<<: *common_attrs
sensor.md_wwwsudois:
friendly_name: "wwwsudois.md"
<<: *common_attrs
sensor.template_md_testing_media_players:
friendly_name: "testing_media_players.md"
owntone_server: "owntone_server"
<<: *common_attrs
template:
- unique_id: md_audio
sensor:
- unique_id: owntone_now_playing
name: md_audio_owntone_now_playing
icon: |
mdi:cast-audio-variant
state: |
audio_owntone_now_playing.md
attributes:
md: |
{% set title = state_attr("media_player.owntone_server", "media_title") %}
{% set name = state_attr("media_player.owntone_server", "media_album_name") %}
{% set artist = state_attr("media_player.owntone_server", "media_artist") %}
{% set mediatype = state_attr("media_player.owntone_server", "media_content_type") %}
[{{ mediatype | capitalize }}] {{ name }} - {{ title }} | {{ artist }}
title: |
{% if state_attr("media_player.owntone_server", "media_content_type") =="podcast" %}
Playing podcast
{% else %}
Now playing
{% endif %}
- unique_id: sonos_favs
name: md_audio_sonos_favs
icon: |
mdi:star
availability: |
{{
has_value(this.attributes.get("source_id_s1"))
and has_value(this.attributes.get("source_id_s2"))
}}
state: |
{{ state_attr(this.entity_id, "friendly_name") }}
attributes:
md: |
{% set s1 = state_attr(this.attributes.get("source_id_s1"), "items") %}
{% set s2 = state_attr(this.attributes.get("source_id_s2"), "items") %}
{% set sonos = [
{"name": "S1", "favs": s1},
{"name": "S2", "favs": s2},
] -%}
# Sonos favorites
{% for item in sonos -%}
## {{ item.name }}
{% if item.favs|length > 0 -%}
| Name | Value |
|:-----------|:--------|
{% for k, v in item.favs.items() -%}
| `{{ k }}` | {{ v }} |
{% endfor %}
{% endif %}
{% endfor %}
#"source",
- unique_id: owntone_media_players
name: md_audio_owntone_media_players
icon: |
mdi:cast-audio-variant
state: |
audio_owntone_media_player.md
attributes:
md: |
# `media_player` attrs
- [OwnTone stream](https://hass.sudo.is/_media/owntone)
{%
set player_id = [
"apple_tv",
"owntone_mpd",
"owntone_server",
"esphome_muse",
"sonos_livingroom",
"vlcd",
"sonos_bedroom",
"dlna_bedroom",
"owntone_output_bedroom",
"bedroom",
"owntone_output_fifo",
] | map("regex_replace", "^", "media_player.")
-%}{%
set skip_attrs = [
"friendly_name",
"source_list",
"media_position",
"media_duration",
"media_track",
"media_title",
"media_artist",
"media_album_name",
"media_album_artist",
"media_content_type",
"media_content_id",
"media_position_updated_at",
"entity_picture",
"shuffle",
"repeat",
"supported_features",
"device_class",
]
-%}{%
set n = 15
-%}
{% for item in player_id -%}
{% set attrs = states[item].attributes -%}
{% set friendly_name = attrs.get("friendly_name", item.entity_id) -%}
{% set title = attrs.get("media_title", "missing metadata").replace(" | ", " - ").split("?authSig=")[0] -%}
{% set pos = attrs.get("media_position", 0.0)|round(1) / attrs.get("media_duration", 1.0)|round(1) * 100 -%}
{% set img = attrs.get("entity_picture") -%}
{% set s = states(item) -%}
## {{ friendly_name }}
State: `{{ states(item) }}` at {{ pos|round(0) }}%
{# /local/images/menu/play-16.png -#}
<ha-icon icon="mdi:{% if s == "playing" %}play{% else %}pause{% endif %}"></ha-icon> _{{ title }}_
<ha-icon icon="mdi:cast-audio-variant"></ha-icon> {{ attrs.get("media_content_type", "Audio item").capitalize() }} _{{ attrs.get("media_album_name") }}_ by _{{ attrs.get("media_artist") }}_.
<ha-icon icon="mdi:file"></ha-icon> `{{ attrs.get("media_content_id") }}`
{% if img -%}
<div style="text-align: center; margin-right: auto">
<img src="{{ img }}" {% if img.endswith(".svg") %}width="20%"{% endif %}>
<p>
<a href="https://hass.sudo.is{{ img }}">
<code>
{{ img.split("?")[0] }}
</code>
</a>
</p>
</div>
{% endif %}
{% if attrs|length > 0 -%}
> | Attribute | Value |
> |----------:|----------:|
{% for k, v_ in attrs|items -%}
{% if k not in skip_attrs or attrs.get("media_title") is none -%}
{% set v = v_ | string -%}
> | `{{ k }}` | `{% if v|length>n %}...{% endif %}{{ v[-n:].strip() }}`
{% endif -%}
{% endfor %}
{% endif %}
{% if attrs.get("media_title") is none -%}
_All available attributes are shown for this `media_player` entity, due to missing metadata._
{% endif %}
{% if attrs.get("source_list", [])|length > 0 -%}
{% set sl = attrs.get("source_list") -%}
### Source
{% if attrs.get("source") -%}
**Source**:
```text
{{ attrs.get("source") }}
```
{% endif -%}
**Source list**: {{ sl|length }} items
{% for srcitem in sl[:3] -%}
- `{{ srcitem }}`
{% endfor %}
{% endif -%}
{% endfor %}
- sensor:
- unique_id: md_packages
name: md_packages
icon: |
mdi:package
state: |
packages.md
attributes:
md: |
{%
set in_transit = states("sensor.seventeentrack_packages_in_transit")
| int(0)
%}{%
set delivered = states("sensor.seventeentrack_packages_delivered")
| int(0)
%}{%
set expired = states("sensor.seventeentrack_packages_expired")
| int(0)
%}{%
set not_found = states("sensor.seventeentrack_packages_not_found")
| int(0)
%}{%
set pick_up = states("sensor.seventeentrack_packages_ready_to_be_picked_up")
| int(0)
%}{%
set returned = states("sensor.seventeentrack_packages_returned")
| int(0)
%}{%
set undelivered = states("sensor.seventeentrack_packages_undelivered")
| int(0)
%}{%
set total_pkgs = [
in_transit, delivered, expired, not_found, pick_up, returned, undelivered
] | sum
%}
# Packages
## Overview
{% if total_pkgs > 0 %}
| Status | Number of packages |
|:------------------|-----------------------------------:|
{% if not_found > 0 -%}
| **Not found** | {{ not_found }} pkgs |
{% endif -%}
{% if in_transit > 0 -%}
| In transit | {{ in_transit }} pkgs |
{% endif -%}
{% if delivered > 0 -%}
| Delivered | {{ delivered }} pkgs |
{% endif %}
{% else %}
> _Currently no tracked packages_.
{% endif %}
## In Transit
{% if in_transit > 0 -%}
{% for package in states.sensor.seventeentrack_packages_in_transit.attributes.packages %}
1. **{{ package.friendly_name }}** ( `{{ package.tracking_number }}` )
{{ package.info_text }}
{% endfor %}
{% else %}
> _No tracked packages in transit._
{% endif %}
- unique_id: md_wwwsudois
name: md_wwwsudois
icon: |
mdi:git
state: |
wwwsudois.md
attributes:
md: |
# ![](https://www.sudo.is/favicon.ico)
| Name | [`wwwsudois`](https://git.sudo.is/ben/wwwsudois)
|:--------------------|----:
| Production released | {{states("sensor.sudo_is_version_date")}}
| Version | `{{states("sensor.sudo_is_version")}}`
| URL | [`www.sudo.is`](https://www.sudo.is)
| Build status | ![](https://www.sudo.is/api/buildstatus.png)
![](https://www.sudo.is/avatar/green_fade.png)
- unique_id: md_testing
sensor:
- unique_id: media_players
icon: |
mdi:cast-audio-variant
#picture: |
# {% set ot_server = this.attributes.get("owntone_server", "").strip() -%}
# {% if ot_server|length>0 -%}
# /api/media_player_proxy/media_player.{{ ot_server }}
# {% endif %}
availability: |
{{ true }}
state: |
testing_media_players.yaml
attributes:
md: |
# OwnTone `media_player`
**NOTE**: this is a test card.
This sensor return a Markdown document
with info about audio `media_player`
entities, mostly for OwnTone.
To render this document in Home Assistant,
create a Markdown card, and template this
entity:
```python
state_attr("sensor.template_md_testing_media_players", "md")
```
This way, the template is rendered on the
backend instead of on the client. And it
is also kept in source control.