224 lines
62 KiB
JSON
224 lines
62 KiB
JSON
[
|
||
{
|
||
"id": "7.5 Inch Dashboard",
|
||
"automation": "- alias: 7.5 Inch Dashboard\n description: Dashboard mit Wetter, News, Abfallkalender etc.\n triggers:\n - trigger: time\n at: 05:00:00\n - trigger: time\n at: '15:30:00'\n conditions: []\n actions:\n - alias: Get events 0 day(s) from now\n data:\n start_date_time: '{{ today_at(''00:00'') }}'\n end_date_time: '{{today_at(''00:00'') + timedelta(days=1)}}'\n response_variable: cal_day_0\n target:\n entity_id:\n - calendar.YOURGOOGLECALENDARHERE.COM\n action: calendar.get_events\n - alias: Get events 1 day(s) from now\n data:\n start_date_time: '{{ today_at(''00:00'') + timedelta(days=1) }}'\n end_date_time: '{{ today_at(''00:00'') + timedelta(days=2) }}'\n response_variable: cal_day_1\n target:\n entity_id:\n - calendar.YOURGOOGLECALENDARHERE.COM\n action: calendar.get_events\n - alias: Get events 2 day(s) from now\n data:\n start_date_time: '{{ today_at(''00:00'') + timedelta(days=2) }}'\n end_date_time: '{{ today_at(''00:00'') + timedelta(days=3) }}'\n response_variable: cal_day_2\n target:\n entity_id:\n - calendar.YOURGOOGLECALENDARHERE.COM\n action: calendar.get_events\n - alias: Get events 4 day(s) from now\n data:\n start_date_time: '{{ today_at(''00:00'') + timedelta(days=3) }}'\n end_date_time: '{{ today_at(''00:00'') + timedelta(days=4) }}'\n response_variable: cal_day_3\n target:\n entity_id:\n - calendar.YOURGOOGLECALENDARHERE.COM\n action: calendar.get_events\n - alias: Extract events from all calendars\n variables:\n events_day0: \"{{ cal_day_0.values() | map(attribute='events') | list | sum(start=[])}}\\\n \\ \\n\"\n events_day1: \"{{ cal_day_1.values() | map(attribute='events') | list | sum(start=[])}}\\\n \\ \\n\"\n events_day2: \"{{ cal_day_2.values() | map(attribute='events') | list | sum(start=[])}}\\\n \\ \\n\"\n events_day3: \"{{ cal_day_3.values() | map(attribute='events') | list | sum(start=[])}}\\\n \\ \\n\"\n count0: \"{% if (events_day0 | count == 0) %}\\n 1\\n{% else %}\\n {{ events_day0\\\n \\ | count }}\\n{% endif %}\\n\"\n count1: \"{% if (events_day1 | count == 0) %}\\n 1\\n{% else %}\\n {{ events_day1\\\n \\ | count }}\\n{% endif %}\\n\"\n count2: \"{% if (events_day2 | count == 0) %}\\n 1\\n{% else %}\\n {{ events_day2\\\n \\ | count }}\\n{% endif %}\\n\"\n count3: \"{% if (events_day3 | count == 0) %}\\n 1\\n{% else %}\\n {{ events_day3\\\n \\ | count }}\\n{% endif %}\\n\"\n gap_header: 230\n gap_line: 1\n gap_days: 1\n gap_title: 16\n gap_text: 16\n days:\n - Montag\n - Dienstag\n - Mittwoch\n - Donnerstag\n - Freitag\n - Samstag\n - Sonntag\n months:\n - Januar\n - Februar\n - März\n - April\n - Mai\n - Juni\n - Juli\n - August\n - September\n - Oktober\n - November\n - Dezember\n - alias: Send generated Agenda to OEPL\n metadata: {}\n data:\n rotate: 0\n dry-run: false\n payload:\n - type: rectangle\n x_start: 0\n x_end: 800\n y_start: 0\n y_end: 25\n width: 0\n fill: black\n - type: text\n value: '{% set days = {''Monday'':''Montag'',''Tuesday'':''Dienstag'',''Wednesday'':''Mittwoch'',''Thursday'':''Donnerstag'',''Friday'':''Freitag'',''Saturday'':''Samstag'',''Sunday'':''Sonntag''}\n %} {% set months = {''01'':''Januar'',''02'':''Februar'',''03'':''März'',''04'':''April'',''05'':''Mai'',''06'':''Juni'',''07'':''Juli'',''08'':''August'',''09'':''September'',''10'':''Oktober'',''11'':''November'',''12'':''Dezember''}\n %} {% set now_ts = as_timestamp(now()) %} {% set weekday = days[now_ts |\n timestamp_custom(''%A'')] %} {% set day = now_ts | timestamp_custom(''%d'')\n %} {% set month = months[now_ts | timestamp_custom(''%m'')] %} {% set year\n = now_ts | timestamp_custom(''%Y'') %} {% set time = now_ts | timestamp_custom(''%H:%M'')\n %} Heute ist der {{ weekday }}, der {{ day }}. {{ month }} {{ year }}. Zuletzt\n aktualisiert {{ time }} Uhr.\n\n '\n x: 5\n y: 5\n size: 16\n font: ../../media/greenscreen.ttf\n color: white\n - type: text\n value: Witz des Tages\n x: 400\n y: 190\n size: 18\n font: ../../media/8bitwonder.ttf\n color: gray\n - type: text\n value: \"{% set jokes = [\\n \\\"Wie nennt man einen Bumerang, der nicht zurückkommt?\\\n \\ Ein Stock.\\\",\\n \\\"Wie nennt man einen Schneemann in der Wüste? Eine Pfütze.\\\"\\\n ,\\n \\\"Was ist grün u£nd steht vor der Tür? Ein Klopfsalat!\\\",\\n \\\"Was\\\n \\ ist orange und klingelt an der Tür? Eine Wanderine!\\\",\\n \\\"Was ist grün,\\\n \\ hüpft durch den Wald und ist sehr leise? Ein Ninja-Frosch!\\\",\\n \\\"Warum\\\n \\ können Geister so schlecht lügen? Sie sind zu leicht durchschaubar!\\\"\\\n ,\\n \\\"Ein Witz über Zeitreisen. Aber du wirst ihn nicht mögen. Du hast\\\n \\ gestern schon darüber gelacht!\\\",\\n \\\"Wie nennt man einen Bumerang der\\\n \\ nicht zurück kommt? Einen Stock!\\\",\\n \\\"Mama: Wo ist das Sieb? Fritzchen:\\\n \\ Hab es weggeworfen - da waren so viele Löcher drin.\\\",\\n \\\"Wichtige Erkenntnis\\\n \\ nach dem Urlaub: Gebräunte Haut macht 3kg schwerer!\\\",\\n \\\"Kunde zum\\\n \\ Verkäufer: Werfen Sie mir einen Fisch zu! Verkäufer: Warum? Kunde: Dann\\\n \\ kann ich sagen, ich hätte ihn gefangen!\\\",\\n \\\"Dingdong! 'Hi, wir sammeln\\\n \\ fürs Kinderheim. Haben Sie etwas abzugeben'? Kevin, Justin – kommt mal\\\n \\ her!\\\",\\n \\\"Treffen sich zwei Unsichtbare. Sagt der eine zum anderen:\\\n \\ Lange nicht gesehen!\\\",\\n \\\"Egal wie viele CDs du hast, Carl Benz hatte\\\n \\ Mercedes.\\\",\\n \\\"Sagt die Mutter zur Tochter: 'Wenn du um 11 nicht im\\\n \\ Bett bist, komm nach Hause!'\\\",\\n \\\"Was macht man, wenn eine Blondine\\\n \\ eine Handgranate nach einem wirft? Sicherheitsstöpsel ziehen und zurückwerfen!\\\"\\\n ,\\n \\\"Wie kommt die Blondine an Marmelade? Sie schält einen Berliner.\\\"\\\n ,\\n \\\"Egal wie viel du Ursula schuldest - du kannst dir was Von der Leyen.\\\"\\\n ,\\n \\\"Warum haben Ostfriesen-Toiletten keine Türen? Damit keiner durchs\\\n \\ Schlüsselloch guckt!\\\",\\n \\\"Wie wird bei Ostfriesen das Bild schärfer?\\\n \\ Sie streuen Pfeffer auf den Fernseher!\\\",\\n \\\"Ein Bahnwitz: Weiß aber\\\n \\ nicht, ob der ankommt.\\\",\\n \\\"Was ist weiß und stört beim Frühstück?\\\n \\ Eine Lawine!\\\",\\n \\\"Was ist Grün, hat 6 Beine und fliegt auf dich zu?\\\n \\ Ein Billardtisch!\\\",\\n \\\"Opas letzte Worte: Hör auf an der Leiter zu\\\n \\ wackeln!\\\",\\n \\\"Warum stehen Flamingos auf einem Bein? Sonst fallen sie\\\n \\ um!\\\",\\n \\\"Was ist rot und schlecht für Zähne? Ein Ziegelstein!\\\",\\n\\\n \\ \\\"Was ist gelb, hat einen Arm und kann nicht schwimmen? Ein Bagger!\\\"\\\n ,\\n \\\"Warum ist Hühnchen nicht vegan? Weil da Ei drin ist!\\\",\\n \\\"Warum\\\n \\ gehen Ameisen nicht in die Kirche? Weil sie In-Sekten sind!\\\",\\n \\\"Chuck\\\n \\ Norris kennt die letzte Ziffer von Pi!\\\",\\n \\\"Was ist pink und behindert?\\\n \\ Ein Flamongo!\\\",\\n \\\"Heute war Schrottwichteln im Kindergarten. Wir sind\\\n \\ jetzt Kevins Eltern.\\\",\\n \\\"Wie nennt man falsche Werfer? Scheinwerfer!\\\"\\\n ,\\n \\\"Hab mich vorhin hier ausgesperrt! War ganz schön aus dem Häuschen...\\\"\\\n ,\\n \\\"Wie heißt der Bruder vom Werwolf? Warumwolf.\\\",\\n \\\"Kunde: Würde\\\n \\ gern einen Baum kaufen. Verkäufer: Sorry, da müssen Sie ins Stammhaus,\\\n \\ wir sind nur die Zweigstelle!\\\",\\n \\\"Was ist ein Cowboy ohne Pferd? Ein\\\n \\ Sattelschlepper!\\\",\\n \\\"Wie nennt man einen Spanier ohne Auto? Carlos.\\\"\\\n ,\\n \\\"Welche Handwerker essen am meisten? Die Maurer. Sie verputzen ganze\\\n \\ Häuser!\\\",\\n \\\"Geht ein Dalmatiner einkaufen. Verkäuferin: Sammeln sie\\\n \\ Punkte?\\\",\\n \\\"Was macht ein arbeitsloser Schauspieler? Spielt keine\\\n \\ Rolle.\\\",\\n \\\"Was ist die Mehrzahl von Rettich? Meerrettich!\\\",\\n \\\"\\\n Mein Hund kennt alle Straßen in- und auswendig! Ich nenne ihn Google Mops.\\\"\\\n ,\\n \\\"Gestern habe ich einen Joghurt fallen lassen. Er war nicht mehr haltbar!\\\"\\\n ,\\n \\\"Was ist grün und sitzt auf dem Klo? Ein Kacktus.\\\",\\n \\\"Wie nennt\\\n \\ man Sonnenuntergang auf Finnisch? Hellsinki!\\\",\\n \\\"Treffen sich zwei\\\n \\ Holzwürmer. Sagt der eine stolz: Mein Sohn arbeitet jetzt in der Bank.\\\"\\\n ,\\n \\\"Ich habe meinem Freund einen Limonaden-Witz erzählt. Fanta lustig!\\\"\\\n ,\\n \\\"Wenn ein Professor einen Sandwich macht, ist der dann wissenschaftlich\\\n \\ belegt?\\\",\\n \\\"Über Tofu macht man keine Witze! Das ist geschmacklos.\\\"\\\n ,\\n \\\"Was macht ein Lebra Kranker in der Disco ? Er lässt die Fetzen fliegen.\\\"\\\n ,\\n \\\"Anton, findest du, dass ich eine schlechte Mutter bin? Ich heiße\\\n \\ Paul!\\\",\\n \\\"Was versteht man unter einer Turbine? Nichts. Viel zu laut!\\\"\\\n ,\\n \\\"Anderer Begriff für Abtreibung: Entfernter Verwandter.\\\",\\n \\\"Was\\\n \\ sagt ein Chemiker, dem ein Goldbarren auf den Fuß fällt? AU!\\\",\\n \\\"\\\n Was ist weiß und stört beim essen? Eine Lawine!\\\",\\n \\\"Wie war die Stimmung\\\n \\ in der DDR? Sie hielt sich in Grenzen.\\\",\\n \\\"Was ist weiss und kann\\\n \\ nicht fliegen? Waschmaschine.\\\",\\n \\\"Was ist weiß und brummt? Eine Biene\\\n \\ Mayo.\\\",\\n \\\"Der Unterschied zwischen Mann und Frau? Wenn Frauen sagen\\\n \\ Rich mal! riecht es meistens gut.\\\",\\n \\\"Nichts ist unmöglich! Ach ja?\\\n \\ Dann sag mal B mit offenem Mund!\\\",\\n \\\"Wie nennt man einen Lehrling\\\n \\ beim Zoll? Filz-Stift!\\\",\\n \\\"Chuck Norris hat den Niagara Fall gelöst.\\\"\\\n ,\\n \\\"Was macht eine Blondine, die sich die Ohren zuhält? Sie versucht,\\\n \\ einen Gedanken festzuhalten.\\\",\\n \\\"Wollte Spiderman anrufen, aber der\\\n \\ hatte kein Netz.\\\",\\n \\\"Was macht ein Salafist im Treppenhaus? Hochgehen.\\\"\\\n ,\\n \\\"Wie nennt man jemanden, der so tut als würde er etwas werfen? Scheinwerfer!\\\"\\\n ,\\n \\\"Chuck Norris kann durch Null teilen.\\\",\\n \\\"Was liegt am Strand\\\n \\ und spricht undeutlich? – Eine Nuschel.\\\",\\n \\\"Google fragt bei Chuck\\\n \\ Norris nach der Antwort.\\\",\\n \\\"Genießen Sie Ihren Urlaub vom ersten\\\n \\ Tag an in vollen Zügen. Fahren Sie mit der Bahn.\\\",\\n \\\"Kunde: Acht Semmeln\\\n \\ bitte. Verkäufer: Soll ich sie einpacken? Kunde: Nein! Ich jongliere damit\\\n \\ bis zur Haustür.\\\",\\n \\\"Warum hat man im Wald so schlechten Empfang?\\\n \\ Überall nur Zwei-ge!\\\",\\n \\\"Unsere Familie ist sehr musikalisch! Meine\\\n \\ Schwester ist schon vor der Geburt flöten gegangen!\\\"\\n] %} {% set joke\\\n \\ = jokes | random %} {% set chunks = [] %} {% set remaining = joke %}\\n\\\n {# Erste Zeile (sucht den letzten Leerzeichen vor Zeile 40) #} {% if remaining|length\\\n \\ > 40 %}\\n {% set cut = remaining[:40].rfind(' ') +1 %}\\n {% set chunks\\\n \\ = chunks + [remaining[:cut]|trim] %}\\n {% set remaining = remaining[cut:]\\\n \\ %}\\n{% else %}\\n {% set chunks = chunks + [remaining] %}\\n {% set remaining\\\n \\ = '' %}\\n{% endif %}\\n{# Zweite Zeile #} {% if remaining and chunks|length\\\n \\ < 3 %}\\n {% if remaining|length > 40 %}\\n {% set cut = remaining[:40].rfind('\\\n \\ ') +1 %}\\n {% set chunks = chunks + [remaining[:cut]|trim] %}\\n \\\n \\ {% set remaining = remaining[cut:] %}\\n {% else %}\\n {% set chunks\\\n \\ = chunks + [remaining] %}\\n {% set remaining = '' %}\\n {% endif %}\\n\\\n {% endif %}\\n{# Dritte Zeile #} {% if remaining and chunks|length < 3 %}\\n\\\n \\ {% set chunks = chunks + [remaining[:40]|trim] %}\\n{% endif %}\\n{{ chunks|join('\\\\\\\n n') }}\"\n x: 400\n y: 210\n size: 16\n font: ../../media/at4.ttf\n color: black\n - type: icon\n value: \"{% set state = states('sensor.pirate_weather_daily') %} {% if state\\\n \\ == 'clear-night' %}\\n mdi:weather-night\\n{% elif state == 'cloudy' %}\\n\\\n \\ mdi:weather-cloudy\\n{% elif state == 'fog' %}\\n mdi:weather-fog\\n{%\\\n \\ elif state == 'hail' %}\\n mdi:weather-hail\\n{% elif state == 'lightning'\\\n \\ %}\\n mdi:weather-lightning\\n{% elif state == 'lightning-rainy' %}\\n \\\n \\ mdi:weather-lightning-rainy\\n{% elif state == 'partlycloudy' %}\\n mdi:weather-partly-cloudy\\n\\\n {% elif state == 'pouring' %}\\n mdi:weather-pouring\\n{% elif state == 'rainy'\\\n \\ %}\\n mdi:weather-rainy\\n{% elif state == 'snowy' %}\\n mdi:weather-snowy\\n\\\n {% elif state == 'snowy-rainy' %}\\n mdi:weather-snowy-rainy\\n{% elif state\\\n \\ == 'sunny' %}\\n mdi:weather-sunny\\n{% elif state == 'windy' %}\\n mdi:weather-windy\\n\\\n {% elif state == 'windy-variant' %}\\n mdi:weather-windy-variant\\n{% else\\\n \\ %}\\n mdi:weather-cloudy\\n{% endif %}\\n\"\n x: 5\n y: 80\n size: 50\n color: black\n - type: icon\n value: \"{% set state = states('sensor.pirate_weather_daily') %} {% if state\\\n \\ == 'clear-night' %}\\n mdi:weather-night\\n{% elif state == 'cloudy' %}\\n\\\n \\ mdi:weather-cloudy\\n{% elif state == 'fog' %}\\n mdi:weather-fog\\n{%\\\n \\ elif state == 'hail' %}\\n mdi:weather-hail\\n{% elif state == 'lightning'\\\n \\ %}\\n mdi:weather-lightning\\n{% elif state == 'lightning-rainy' %}\\n \\\n \\ mdi:weather-lightning-rainy\\n{% elif state == 'partlycloudy' %}\\n mdi:weather-partly-cloudy\\n\\\n {% elif state == 'pouring' %}\\n mdi:weather-pouring\\n{% elif state == 'rainy'\\\n \\ %}\\n mdi:weather-rainy\\n{% elif state == 'snowy' %}\\n mdi:weather-snowy\\n\\\n {% elif state == 'snowy-rainy' %}\\n mdi:weather-snowy-rainy\\n{% elif state\\\n \\ == 'sunny' %}\\n mdi:weather-sunny\\n{% elif state == 'windy' %}\\n mdi:weather-windy\\n\\\n {% elif state == 'windy-variant' %}\\n mdi:weather-windy-variant\\n{% else\\\n \\ %}\\n mdi:weather-cloudy\\n{% endif %}\\n\"\n x: 195\n y: 80\n size: 50\n color: black\n - type: text\n value: Wettervorhersage\n x: 5\n y: 35\n size: 18\n font: ../../media/8bitwonder.ttf\n color: gray\n - type: text\n value: Heute\n x: 5\n y: 59\n size: 16\n font: ../../media/at4.ttf\n - type: text\n value: Morgen\n x: 195\n y: 59\n size: 16\n font: ../../media/at4.ttf\n color: black\n - type: text\n value: '{{ state_attr(''sensor.pirate_weather_daily'', ''forecast'')[0].temperature\n | round(0)}}°C'\n x: 70\n y: 85\n size: 26\n font: ../../media/at4.ttf\n - type: text\n value: '{{ state_attr(''sensor.pirate_weather_daily'', ''forecast'')[0].templow\n | round(0)}}°C'\n x: 70\n y: 115\n size: 16\n font: ../../media/at4.ttf\n - type: text\n value: '{% set rain = state_attr(''sensor.pirate_weather_daily'', ''forecast'')[0].precipitation_probability\n | round(0) %} Regen? {{ rain }}%'\n x: 5\n y: 140\n size: 16\n font: ../../media/at4.ttf\n - type: text\n value: '{{ state_attr(''sensor.pirate_weather_daily'', ''forecast'')[1].temperature\n | round(0)}}°C'\n x: 255\n y: 85\n size: 26\n font: ../../media/at4.ttf\n - type: text\n value: '{{ state_attr(''sensor.pirate_weather_daily'', ''forecast'')[1].templow\n | round(0)}}°C'\n x: 265\n y: 115\n size: 16\n font: ../../media/at4.ttf\n - type: text\n value: '{% set rain = state_attr(''sensor.pirate_weather_daily'', ''forecast'')[1].precipitation_probability\n | round(0) %} Regen? {{ rain }}%'\n x: 195\n y: 140\n size: 16\n font: ../../media/at4.ttf\n - type: line\n x_start: 165\n x_end: 165\n y_start: 60\n y_end: 155\n width: 1\n fill: black\n dashed: true\n - type: text\n value: '{{ states(''sensor.wohnzimmer_temperatur_2'') | int }}°C'\n x: 65\n y: 175\n size: 16\n font: ../../media/at4.ttf\n - type: icon\n value: mdi:sofa\n x: 10\n y: 160\n size: 40\n - type: text\n value: '{{ states(''sensor.terrasse_temperatur'') | int }}°C'\n x: 185\n y: 175\n size: 16\n font: ../../media/at4.ttf\n - type: icon\n value: mdi:home-export-outline\n x: 130\n y: 160\n size: 40\n - type: text\n value: Google Kalender\n x: 5\n y: 210\n size: 18\n font: ../../media/8bitwonder.ttf\n color: gray\n - type: text\n value: '{{ days[today_at(''00:00'').weekday()] }} {{ today_at(''00:00'').day\n }}. {{ months[today_at(''00:00'').month-1] }} '\n font: ../../media/Linik_Bold.ttf\n x: 5\n y: '{{ gap_header + 2.5 * gap_line}}\n\n '\n size: 16\n color: black\n - type: multiline\n value: \"{% if events_day0 | count > 0 %}\\n {% for event in (events_day0 |\\\n \\ sort(attribute='start') | list) -%} \\n {% if as_timestamp(event.start)\\\n \\ | timestamp_custom('%H:%M') == \\\"00:00\\\"%}\\n #24h - {{ event.summary\\\n \\ | regex_replace(find='[^\\\\x00-\\\\x7F]', replace='') }}\\n {% else %}\\n\\\n \\ #{% if as_timestamp(event.start) | timestamp_custom('%d%m%y') !=\\\n \\ as_timestamp(event.end) | timestamp_custom('%d%m%y') %}{{ days[(as_timestamp(event.start)\\\n \\ | timestamp_custom('%w') | int)-1][:3] }} {% endif %}{{as_timestamp(event.start)\\\n \\ | timestamp_custom('%H:%M') }} - {% if as_timestamp(event.start) | timestamp_custom('%d%m%y')\\\n \\ != as_timestamp(event.end) | timestamp_custom('%d%m%y') %}{{ days[(as_timestamp(event.end)\\\n \\ | timestamp_custom('%w') | int)-1][:3] }}{% endif %} {{as_timestamp(event.end)\\\n \\ | timestamp_custom('%H:%M') }}: {{ event.summary | regex_replace(find='[^\\\\\\\n x00-\\\\x7F]', replace='') }}\\n {% endif -%}\\n {% endfor -%}\\n{% else\\\n \\ %}\\n #Ingenting\\n{% endif -%}\\n\"\n font: ../../media/at4.ttf\n start_y: '{{ gap_header + gap_title + 0 * gap_line}}\n\n '\n delimiter: '#'\n size: 16\n offset_y: 16\n x: 5\n - type: text\n value: '{{ days[(today_at(''00:00'')+ timedelta(days=1)).weekday()] }} {{\n (today_at(''00:00'') + timedelta(days=1)).day }}. {{ months[(today_at(''00:00'')+\n timedelta(days=1)).month-1] }}'\n font: ../../media/Linik_Bold.ttf\n x: 5\n y: '{{ gap_header + gap_title + gap_days + ((count0 + 1) * gap_text)}}\n\n '\n size: 16\n color: black\n - type: multiline\n value: \"{% if events_day1 | count > 0 %}\\n {% for event in (events_day1 |\\\n \\ sort(attribute='start') | list) -%} \\n {% if as_timestamp(event.start)\\\n \\ | timestamp_custom('%H:%M') == \\\"00:00\\\"%}\\n #24h - {{ event.summary\\\n \\ | regex_replace(find='[^\\\\x00-\\\\x7F]', replace='') }}\\n {% else %}\\n\\\n \\ #{% if as_timestamp(event.start) | timestamp_custom('%d%m%y') !=\\\n \\ as_timestamp(event.end) | timestamp_custom('%d%m%y') %}{{ days[(as_timestamp(event.start)\\\n \\ | timestamp_custom('%w') | int)-1][:3] }} {% endif %}{{as_timestamp(event.start)\\\n \\ | timestamp_custom('%H:%M') }} - {% if as_timestamp(event.start) | timestamp_custom('%d%m%y')\\\n \\ != as_timestamp(event.end) | timestamp_custom('%d%m%y') %}{{ days[(as_timestamp(event.end)\\\n \\ | timestamp_custom('%w') | int)-1][:3] }}{% endif %} {{as_timestamp(event.end)\\\n \\ | timestamp_custom('%H:%M') }}: {{ event.summary | regex_replace(find='[^\\\\\\\n x00-\\\\x7F]', replace='') }}\\n {% endif -%}\\n {% endfor -%}\\n{% else\\\n \\ %}\\n #Ingenting\\n{% endif -%}\\n\"\n font: ../../media/at4.ttf\n start_y: '{{ gap_header + 1.5 * gap_title + 1 * gap_line + gap_days + ((count0\n + 1 ) * gap_text)}}\n\n '\n offset_y: 16\n delimiter: '#'\n size: 16\n x: 5\n color: black\n - type: text\n visible: '{{true if (count0+count1+count2) < 9 else false}}'\n value: '{{ days[(today_at(''00:00'')+ timedelta(days=2)).weekday()] }} {{\n (today_at(''00:00'') + timedelta(days=2)).day }}. {{ months[(today_at(''00:00'')+\n timedelta(days=2)).month-1] }} '\n font: ../../media/Linik_Bold.ttf\n x: 5\n y: '{{ gap_header + 2 * gap_title + 4 * gap_line + gap_days + + (((count0\n + 1) + (count1 + 1)) * gap_text)}}\n\n '\n size: 16\n color: black\n - type: multiline\n value: \"{% if events_day2 | count > 0 %}\\n {% for event in (events_day2 |\\\n \\ sort(attribute='start') | list) -%} \\n {% if as_timestamp(event.start)\\\n \\ | timestamp_custom('%H:%M') == \\\"00:00\\\"%}\\n #24h - {{ event.summary\\\n \\ | regex_replace(find='[^\\\\x00-\\\\x7F]', replace='') }}\\n {% else %}\\n\\\n \\ #{% if as_timestamp(event.start) | timestamp_custom('%d%m%y') !=\\\n \\ as_timestamp(event.end) | timestamp_custom('%d%m%y') %}{{ days[(as_timestamp(event.start)\\\n \\ | timestamp_custom('%w') | int)-1][:3] }} {% endif %}{{as_timestamp(event.start)\\\n \\ | timestamp_custom('%H:%M') }} - {% if as_timestamp(event.start) | timestamp_custom('%d%m%y')\\\n \\ != as_timestamp(event.end) | timestamp_custom('%d%m%y') %}{{ days[(as_timestamp(event.end)\\\n \\ | timestamp_custom('%w') | int)-1][:3] }}{% endif %} {{as_timestamp(event.end)\\\n \\ | timestamp_custom('%H:%M') }}: {{ event.summary | regex_replace(find='[^\\\\\\\n x00-\\\\x7F]', replace='') }}\\n {% endif -%}\\n {% endfor -%}\\n{% else\\\n \\ %}\\n #Ingenting\\n{% endif -%}\\n\"\n font: ../../media/at4.ttf\n start_y: '{{ gap_header + 3 * gap_title + 1 * gap_line + gap_days + (((count0\n + 1) + (count1 + 1)) * gap_text)}}\n\n '\n offset_y: 16\n delimiter: '#'\n size: 16\n x: 5\n color: black\n visible: '{{true if (count0+count1+count2) < 9 else false}}'\n - type: text\n visible: '{{true if (count0+count1+count2+count3) < 7 else false}}'\n value: '{{ days[(today_at(''00:00'') + timedelta(days=3)).weekday()] }} {{\n (today_at(''00:00'') + timedelta(days=3)).day }}. {{ months[(today_at(''00:00'')+\n timedelta(days=3)).month-1] }} '\n font: ../../media/Linik_Bold.ttf\n x: 5\n y: '{{ gap_header + 3 * gap_title + 4 * gap_line + gap_days + + (((count0\n + 1) + (count1 + 1) + (count2 + 1)) * gap_text)}}\n\n '\n size: 16\n color: black\n - type: multiline\n value: \"{% if events_day3 | count > 0 %}\\n {% for event in (events_day3 |\\\n \\ sort(attribute='start') | list) -%} \\n {% if as_timestamp(event.start)\\\n \\ | timestamp_custom('%H:%M') == \\\"00:00\\\"%}\\n #24h - {{ event.summary\\\n \\ | regex_replace(find='[^\\\\x00-\\\\x7F]', replace='') }}\\n {% else %}\\n\\\n \\ #{% if as_timestamp(event.start) | timestamp_custom('%d%m%y') !=\\\n \\ as_timestamp(event.end) | timestamp_custom('%d%m%y') %}{{ days[(as_timestamp(event.start)\\\n \\ | timestamp_custom('%w') | int)-1][:3] }} {% endif %}{{as_timestamp(event.start)\\\n \\ | timestamp_custom('%H:%M') }} - {% if as_timestamp(event.start) | timestamp_custom('%d%m%y')\\\n \\ != as_timestamp(event.end) | timestamp_custom('%d%m%y') %}{{ days[(as_timestamp(event.end)\\\n \\ | timestamp_custom('%w') | int)-1][:3] }}{% endif %} {{as_timestamp(event.end)\\\n \\ | timestamp_custom('%H:%M') }}: {{ event.summary | regex_replace(find='[^\\\\\\\n x00-\\\\x7F]', replace='') }}\\n {% endif -%}\\n {% endfor -%}\\n{% else\\\n \\ %}\\n #Ingenting\\n{% endif -%}\\n\"\n font: ../../media/at4.ttf\n start_y: '{{ gap_header + 4 * gap_title + 1 * gap_line + gap_days + (((count0\n + 1) + (count1 + 1) + (count2 + 1)) * gap_text)}}\n\n '\n offset_y: 16\n delimiter: '#'\n size: 16\n x: 5\n visible: '{{true if (count0+count1+count2+count3) < 7 else false}}'\n color: black\n - type: text\n value: Abfallkalender\n x: 400\n y: 35\n size: 18\n font: ../../media/8bitwonder.ttf\n color: gray\n - type: text\n value: 'Biomüll-Abholung: {{ states(''sensor.biomull'') }}'\n x: 450\n y: 65\n size: 16\n color: black\n font: ../../media/at4.ttf\n - type: icon\n value: bio\n x: 400\n y: 50\n size: 40\n - type: text\n value: 'Restmüll-Abholung: {{ states(''sensor.restmull'') }}'\n x: 450\n y: 105\n size: 16\n color: black\n font: ../../media/at4.ttf\n - type: icon\n value: trash-can-outline\n x: 400\n y: 90\n size: 40\n - type: text\n value: 'Gelber Sack-Abholung: {{ states(''sensor.gelber_sack'') }}'\n x: 450\n y: 145\n size: 16\n color: black\n font: ../../media/at4.ttf\n - type: icon\n value: recycle\n x: 400\n y: 130\n size: 40\n - type: text\n value: Schlagzeilen\n x: 400\n y: 300\n size: 17\n font: ../../media/8bitwonder.ttf\n color: gray\n - type: text\n value: '{{ state_attr(''sensor.tagesschau'', ''entries'')[0].title | regex_replace(''(.{1,40})(\\\\s+|$)'',\n ''\\\\1\\n'') }}'\n x: 400\n y: '{{ y1 }}'\n color: black\n size: 14\n font: ../../media/at4.ttf\n spacing: 0.5\n - type: text\n value: '{{ state_attr(''sensor.tagesschau'', ''entries'')[1].title | regex_replace(''(.{1,40})(\\\\s+|$)'',\n ''\\\\1\\n'') }}'\n x: 400\n y: '{{ y2 }}'\n color: black\n font: ../../media/at4.ttf\n size: 14\n spacing: 0.5\n - type: text\n value: '{{ state_attr(''sensor.tagesschau'', ''entries'')[2].title | regex_replace(''(.{1,30})(\\\\s+|$)'',\n ''\\\\1\\n'') }}'\n x: 400\n y: '{{ y3 }}'\n color: black\n font: ../../media/at4.ttf\n size: 14\n spacing: 0.5\n - type: text\n value: '{{ state_attr(''sensor.tagesschau'', ''entries'')[3].title | regex_replace(''(.{1,30})(\\\\s+|$)'',\n ''\\\\1\\n'') }}'\n x: 400\n y: '{{ y4 }}'\n color: black\n font: ../../media/at4.ttf\n size: 14\n spacing: 0.5\n - type: rectangle\n x_start: 0\n x_end: 800\n y_start: 455\n y_end: 480\n width: 0\n fill: black\n - type: text\n value: Wolle gratitsch WLAN? Guckstu da ->\n x: 365\n y: 461\n size: 14\n font: ../../media/greenscreen.ttf\n color: white\n - type: qrcode\n data: WIFI:S:YOURWLANSSID;T:WPA;P:YOURWLANPASSWORD;;\n x: 710\n y: 395\n boxsize: 2\n border: 2\n color: black\n bgcolor: white\n action: open_epaper_link.drawcustom\n target:\n device_id:\n - DEVICEID\n - DEVICEID\n mode: single\n variables:\n line_count_0: '{{ (state_attr(''sensor.tagesschau'', ''entries'')[0].title |\n regex_replace(''(.{1,40})(\\\\s+|$)'', ''\\\\1\\n'') | replace(''\\n'', ''§'')).split(''§'')\n | length }}'\n line_count_1: '{{ (state_attr(''sensor.tagesschau'', ''entries'')[1].title |\n regex_replace(''(.{1,40})(\\\\s+|$)'', ''\\\\1\\n'') | replace(''\\n'', ''§'')).split(''§'')\n | length }}'\n line_count_2: '{{ (state_attr(''sensor.tagesschau'', ''entries'')[2].title |\n regex_replace(''(.{1,30})(\\\\s+|$)'', ''\\\\1\\n'') | replace(''\\n'', ''§'')).split(''§'')\n | length }}'\n line_count_3: '{{ (state_attr(''sensor.tagesschau'', ''entries'')[3].title |\n regex_replace(''(.{1,30})(\\\\s+|$)'', ''\\\\1\\n'') | replace(''\\n'', ''§'')).split(''§'')\n | length }}'\n line_count_4: '{{ (state_attr(''sensor.tagesschau'', ''entries'')[4].title |\n regex_replace(''(.{1,45})(\\\\s+|$)'', ''\\\\1\\n'') | replace(''\\n'', ''§'')).split(''§'')\n | length }}'\n y1: 325\n y2: '{{ y1 + (line_count_0 * 14) }}'\n y3: '{{ y2 + (line_count_1 * 14) }}'\n y4: '{{ y3 + (line_count_2 * 14) }}'\n y5: '{{ y4 + (line_count_3 * 14) }}'",
|
||
"config": [
|
||
{
|
||
"name": "Google Calendar",
|
||
"room": null,
|
||
"type": "calendar",
|
||
"id": {
|
||
"entity_id": "calendar.YOURGOOGLECALENDARHERE.COM",
|
||
"device_id": null
|
||
}
|
||
},
|
||
{
|
||
"name": "Pirate Weather Daily",
|
||
"room": null,
|
||
"type": "sensor",
|
||
"id": {
|
||
"entity_id": "sensor.pirate_weather_daily",
|
||
"device_id": null
|
||
}
|
||
},
|
||
{
|
||
"name": "Wohnzimmer Temperatur",
|
||
"room": "living_room",
|
||
"type": "sensor",
|
||
"id": {
|
||
"entity_id": "sensor.wohnzimmer_temperatur_2",
|
||
"device_id": null
|
||
}
|
||
},
|
||
{
|
||
"name": "Terrasse Temperatur",
|
||
"room": "terrace",
|
||
"type": "sensor",
|
||
"id": {
|
||
"entity_id": "sensor.terrasse_temperatur",
|
||
"device_id": null
|
||
}
|
||
},
|
||
{
|
||
"name": "Tagesschau News",
|
||
"room": null,
|
||
"type": "sensor",
|
||
"id": {
|
||
"entity_id": "sensor.tagesschau",
|
||
"device_id": null
|
||
}
|
||
},
|
||
{
|
||
"name": "Biomüll Sensor",
|
||
"room": null,
|
||
"type": "sensor",
|
||
"id": {
|
||
"entity_id": "sensor.biomull",
|
||
"device_id": null
|
||
}
|
||
},
|
||
{
|
||
"name": "Restmüll Sensor",
|
||
"room": null,
|
||
"type": "sensor",
|
||
"id": {
|
||
"entity_id": "sensor.restmull",
|
||
"device_id": null
|
||
}
|
||
},
|
||
{
|
||
"name": "Gelber Sack Sensor",
|
||
"room": null,
|
||
"type": "sensor",
|
||
"id": {
|
||
"entity_id": "sensor.gelber_sack",
|
||
"device_id": null
|
||
}
|
||
},
|
||
{
|
||
"name": "E-Paper Device 1",
|
||
"room": null,
|
||
"type": "device",
|
||
"id": {
|
||
"entity_id": null,
|
||
"device_id": "DEVICEID"
|
||
}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "ABFALLKALENDER",
|
||
"automation": "- alias: ABFALLKALENDER\n description: ''\n triggers:\n - trigger: time\n at: 00:00:01\n conditions:\n - condition: time\n after: 04:00:00\n before: '22:00:00'\n enabled: true\n actions:\n - alias: Send generated Agenda to OEPL\n metadata: {}\n data:\n rotate: 0\n dry-run: false\n payload:\n - type: text\n value: '{{ as_timestamp(now()) | timestamp_custom(''%d%m%H%M'') }}'\n x: 332\n y: 2\n size: 10\n - type: text\n value: Abfallkalender\n x: 112\n y: 4\n size: 16\n color: black\n font: ../../media/Bungee.ttf\n - type: line\n x_start: 0\n x_end: 384\n y_start: 25\n y_end: 25\n width: 1\n fill: black\n - type: text\n value: Biomüll\n x: 28\n y: 80\n size: 16\n color: black\n - type: icon\n value: bio\n x: 41\n y: 30\n size: 40\n - type: text\n value: '{{ states(''sensor.biomull'') }}'\n x: '{{ ((128 - (states(''sensor.biomull'') | length * 7.8)) / 2) | int ~ ''''\n }}'\n y: 110\n size: 20\n font: ../../media/Abel-Regular.ttf\n - type: text\n value: '{{ states(''sensor.biomull_datum'') }}'\n x: '{{ ((128 - (states(''sensor.biomull_datum'') | length * 8.5)) / 2) | int\n ~ '''' }}'\n y: 145\n size: 20\n font: ../../media/Abel-Regular.ttf\n - type: line\n x_start: 128\n x_end: 128\n y_start: 35\n y_end: 175\n width: 1\n dashed: true\n fill: black\n - type: text\n value: Restmüll\n x: 50%\n y: 87\n size: 16\n anchor: mm\n color: black\n - type: icon\n value: trash-can-outline\n x: 173\n y: 35\n size: 40\n - type: text\n value: '{{ states(''sensor.restmull'') }} '\n x: 50%\n anchor: mm\n y: 118\n size: 20\n color: black\n font: ../../media/Abel-Regular.ttf\n - type: text\n value: '{{ states(''sensor.restmull_datum'') }} '\n x: 50%\n anchor: mm\n y: 153\n size: 20\n color: black\n font: ../../media/Abel-Regular.ttf\n - type: line\n x_start: 256\n x_end: 256\n y_start: 35\n y_end: 175\n width: 1\n dashed: true\n fill: black\n - type: text\n value: Gelber Sack\n x: 267\n y: 80\n size: 16\n color: black\n - type: icon\n value: recycle\n x: 300\n y: 30\n size: 40\n - type: text\n value: '{{ states(''sensor.biomull'') }}'\n x: '{{ (256 + ((128 - (states(''sensor.biomull'') | length * 8)) / 2)) | int\n ~ '''' }}'\n y: 110\n size: 20\n font: ../../media/Abel-Regular.ttf\n - type: text\n value: '{{ states(''sensor.biomull_datum'') }}'\n x: '{{ (256 + ((128 - (states(''sensor.biomull_datum'') | length * 8.5)) /\n 2)) | int ~ '''' }}'\n y: 145\n size: 20\n font: ../../media/Abel-Regular.ttf\n color: black\n target:\n device_id: xxxxxxxxxxxxxxxxx\n action: open_epaper_link.drawcustom\n mode: restart",
|
||
"config": [
|
||
{
|
||
"name": "Biomüll Sensor",
|
||
"room": null,
|
||
"type": "sensor",
|
||
"id": {
|
||
"entity_id": "sensor.biomull",
|
||
"device_id": null
|
||
}
|
||
},
|
||
{
|
||
"name": "Restmüll Sensor",
|
||
"room": null,
|
||
"type": "sensor",
|
||
"id": {
|
||
"entity_id": "sensor.restmull",
|
||
"device_id": null
|
||
}
|
||
},
|
||
{
|
||
"name": "Biomüll Datum",
|
||
"room": null,
|
||
"type": "sensor",
|
||
"id": {
|
||
"entity_id": "sensor.biomull_datum",
|
||
"device_id": null
|
||
}
|
||
},
|
||
{
|
||
"name": "Restmüll Datum",
|
||
"room": null,
|
||
"type": "sensor",
|
||
"id": {
|
||
"entity_id": "sensor.restmull_datum",
|
||
"device_id": null
|
||
}
|
||
},
|
||
{
|
||
"name": "E-Paper Device 2",
|
||
"room": null,
|
||
"type": "device",
|
||
"id": {
|
||
"entity_id": null,
|
||
"device_id": "xxxxxxxxxxxxxxxxx"
|
||
}
|
||
},
|
||
{
|
||
"name": "E-Paper Device 4",
|
||
"room": null,
|
||
"type": "device",
|
||
"id": {
|
||
"entity_id": null,
|
||
"device_id": "xxxxxxxxxxxxxxxx"
|
||
}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "BIG 3 - Google Kalender",
|
||
"automation": "- alias: BIG 3 - Google Kalender\n description: ''\n triggers:\n - trigger: time_pattern\n hours: '1'\n conditions: []\n actions:\n - alias: Get events 0 day(s) from now\n data:\n start_date_time: '{{ today_at(''00:00'') }}'\n end_date_time: '{{today_at(''00:00'') + timedelta(days=1)}}'\n response_variable: cal_day_0\n target:\n entity_id:\n - calendar.YOURGOOGLECALENDAR\n action: calendar.get_events\n - alias: Get events 1 day(s) from now\n data:\n start_date_time: '{{ today_at(''00:00'') + timedelta(days=1) }}'\n end_date_time: '{{ today_at(''00:00'') + timedelta(days=2) }}'\n response_variable: cal_day_1\n target:\n entity_id:\n - calendar.YOURGOOGLECALENDAR\n action: calendar.get_events\n - alias: Get events 2 day(s) from now\n data:\n start_date_time: '{{ today_at(''00:00'') + timedelta(days=2) }}'\n end_date_time: '{{ today_at(''00:00'') + timedelta(days=3) }}'\n response_variable: cal_day_2\n target:\n entity_id:\n - calendar.YOURGOOGLECALENDAR\n action: calendar.get_events\n - alias: Get events 4 day(s) from now\n data:\n start_date_time: '{{ today_at(''00:00'') + timedelta(days=3) }}'\n end_date_time: '{{ today_at(''00:00'') + timedelta(days=4) }}'\n response_variable: cal_day_3\n target:\n entity_id:\n - calendar.YOURGOOGLECALENDAR\n action: calendar.get_events\n - alias: Extract events from all calendars\n variables:\n events_day0: \"{{ cal_day_0.values() | map(attribute='events') | list | sum(start=[])}}\\\n \\ \\n\"\n events_day1: \"{{ cal_day_1.values() | map(attribute='events') | list | sum(start=[])}}\\\n \\ \\n\"\n events_day2: \"{{ cal_day_2.values() | map(attribute='events') | list | sum(start=[])}}\\\n \\ \\n\"\n events_day3: \"{{ cal_day_3.values() | map(attribute='events') | list | sum(start=[])}}\\\n \\ \\n\"\n count0: \"{% if (events_day0 | count == 0) %}\\n 1\\n{% else %}\\n {{ events_day0\\\n \\ | count }}\\n{% endif %}\\n\"\n count1: \"{% if (events_day1 | count == 0) %}\\n 1\\n{% else %}\\n {{ events_day1\\\n \\ | count }}\\n{% endif %}\\n\"\n count2: \"{% if (events_day2 | count == 0) %}\\n 1\\n{% else %}\\n {{ events_day2\\\n \\ | count }}\\n{% endif %}\\n\"\n count3: \"{% if (events_day3 | count == 0) %}\\n 1\\n{% else %}\\n {{ events_day3\\\n \\ | count }}\\n{% endif %}\\n\"\n gap_header: 5\n gap_line: 1\n gap_days: 1\n gap_title: 10\n gap_text: 16\n days:\n - Montag\n - Dienstag\n - Mittwoch\n - Donnerstag\n - Freitag\n - Samstag\n - Sonntag\n months:\n - Januar\n - Februar\n - März\n - April\n - Mai\n - Juni\n - Juli\n - August\n - September\n - Oktober\n - November\n - Dezember\n - alias: Send generated Agenda to OEPL\n metadata: {}\n data:\n rotate: 0\n dry-run: false\n payload:\n - type: icon\n value: \"{% set state = states('sensor.pirate_weather_daily') %} {% if state\\\n \\ == 'clear-night' %}\\n mdi:weather-night\\n{% elif state == 'cloudy' %}\\n\\\n \\ mdi:weather-cloudy\\n{% elif state == 'fog' %}\\n mdi:weather-fog\\n{%\\\n \\ elif state == 'hail' %}\\n mdi:weather-hail\\n{% elif state == 'lightning'\\\n \\ %}\\n mdi:weather-lightning\\n{% elif state == 'lightning-rainy' %}\\n \\\n \\ mdi:weather-lightning-rainy\\n{% elif state == 'partlycloudy' %}\\n mdi:weather-partly-cloudy\\n\\\n {% elif state == 'pouring' %}\\n mdi:weather-pouring\\n{% elif state == 'rainy'\\\n \\ %}\\n mdi:weather-rainy\\n{% elif state == 'snowy' %}\\n mdi:weather-snowy\\n\\\n {% elif state == 'snowy-rainy' %}\\n mdi:weather-snowy-rainy\\n{% elif state\\\n \\ == 'sunny' %}\\n mdi:weather-sunny\\n{% elif state == 'windy' %}\\n mdi:weather-windy\\n\\\n {% elif state == 'windy-variant' %}\\n mdi:weather-windy-variant\\n{% else\\\n \\ %}\\n mdi:weather-cloudy\\n{% endif %}\\n\"\n x: 40\n y: 27\n size: 50\n color: black\n - type: text\n value: YOUR HOMETOWN\n x: '{% set col_width = 130 %} {% set char_width = 11 %} {# Je nach Font und\n Größe anpassen! #} {% set text = \"YOUR HOMETOWN\" %} {{ ((col_width - (text|length\n * char_width)) // 2) }}\n\n '\n y: 7\n size: 16\n font: ../../media/Bungee.ttf\n - type: text\n value: '{{ state_attr(''sensor.pirate_weather_daily'', ''forecast'')[0].temperature\n }}°C'\n x: 15\n y: 85\n size: 20\n - type: text\n value: '{{ state_attr(''sensor.pirate_weather_daily'', ''forecast'')[0].templow\n }}°C'\n x: 15\n y: 105\n size: 16\n - type: text\n value: '{{ state_attr(''sensor.pirate_weather_daily'', ''forecast'')[0].precipitation_probability\n | round(0) }}%'\n x: 90\n y: 105\n size: 16\n - type: icon\n value: mdi:weather-rainy\n x: 90\n y: 85\n size: 16\n - type: text\n value: '{{ as_timestamp(now()) | timestamp_custom(''%d%m%H%M'') }}'\n x: 332\n y: 2\n size: 10\n font: ../../media/GothamRnd_Bold.ttf\n - type: icon\n value: mdi:sofa\n x: 15\n y: 130\n size: 30\n - type: text\n value: '{{ states(''SENSOR.LIVINGROOMTEMPERATURE'') | int }}°C'\n x: 10\n y: 164\n size: 16\n - type: icon\n value: mdi:home-export-outline\n x: 80\n y: 130\n size: 30\n - type: line\n x_start: 63\n x_end: 63\n y_start: 130\n y_end: 180\n width: 1\n fill: black\n - type: text\n value: '{{ states(''SENSOR.OUTDOORTEMPERATURE'') | int }}°C'\n x: 80\n y: 164\n size: 16\n - type: line\n x_start: 5\n x_end: 125\n y_start: 125\n y_end: 125\n width: 1\n fill: black\n - type: line\n x_start: 130\n x_end: 130\n y_start: 5\n y_end: 180\n width: 1\n dashed: false\n fill: black\n - type: text\n value: '{{ days[today_at(''00:00'').weekday()] }} {{ today_at(''00:00'').day\n }}. {{ months[today_at(''00:00'').month-1] }} '\n font: ../../media/Bungee.ttf\n x: 140\n y: '{{ gap_header + 2.5 * gap_line}}\n\n '\n size: 16\n color: black\n - type: multiline\n value: \"{% if events_day0 | count > 0 %}\\n {% for event in (events_day0 |\\\n \\ sort(attribute='start') | list) -%} \\n {% if as_timestamp(event.start)\\\n \\ | timestamp_custom('%H:%M') == \\\"00:00\\\"%}\\n #Ganztägig - {{ event.summary\\\n \\ }}\\n {% else %}\\n #{% if as_timestamp(event.start) | timestamp_custom('%d%m%y')\\\n \\ != as_timestamp(event.end) | timestamp_custom('%d%m%y') %}{{ days[(as_timestamp(event.start)\\\n \\ | timestamp_custom('%w') | int)-1][:3] }} {% endif %}{{as_timestamp(event.start)\\\n \\ | timestamp_custom('%H:%M') }} - {% if as_timestamp(event.start) | timestamp_custom('%d%m%y')\\\n \\ != as_timestamp(event.end) | timestamp_custom('%d%m%y') %}{{ days[(as_timestamp(event.end)\\\n \\ | timestamp_custom('%w') | int)-1][:3] }}{% endif %} {{as_timestamp(event.end)\\\n \\ | timestamp_custom('%H:%M') }}: {{ event.summary }}\\n {% endif -%}\\n\\\n \\ {% endfor -%}\\n{% else %}\\n #Ingenting\\n{% endif -%}\\n\"\n font: ../../media/Abel-Regular.ttf\n start_y: '{{ gap_header + gap_title + 0 * gap_line}}\n\n '\n delimiter: '#'\n size: 16\n offset_y: 16\n x: 140\n - type: text\n value: '{{ days[(today_at(''00:00'')+ timedelta(days=1)).weekday()] }} {{\n (today_at(''00:00'') + timedelta(days=1)).day }}. {{ months[(today_at(''00:00'')+\n timedelta(days=1)).month-1] }}'\n font: ../../media/Bungee.ttf\n x: 140\n y: '{{ gap_header + gap_title + gap_days + ((count0 + 1) * gap_text)}}\n\n '\n size: 16\n color: black\n - type: multiline\n value: \"{% if events_day1 | count > 0 %}\\n {% for event in (events_day1 |\\\n \\ sort(attribute='start') | list) -%} \\n {% if as_timestamp(event.start)\\\n \\ | timestamp_custom('%H:%M') == \\\"00:00\\\"%}\\n #Ganztägig - {{ event.summary\\\n \\ }}\\n {% else %}\\n #{% if as_timestamp(event.start) | timestamp_custom('%d%m%y')\\\n \\ != as_timestamp(event.end) | timestamp_custom('%d%m%y') %}{{ days[(as_timestamp(event.start)\\\n \\ | timestamp_custom('%w') | int)-1][:3] }} {% endif %}{{as_timestamp(event.start)\\\n \\ | timestamp_custom('%H:%M') }} - {% if as_timestamp(event.start) | timestamp_custom('%d%m%y')\\\n \\ != as_timestamp(event.end) | timestamp_custom('%d%m%y') %}{{ days[(as_timestamp(event.end)\\\n \\ | timestamp_custom('%w') | int)-1][:3] }}{% endif %} {{as_timestamp(event.end)\\\n \\ | timestamp_custom('%H:%M') }}: {{ event.summary }}\\n {% endif -%}\\n\\\n \\ {% endfor -%}\\n{% else %}\\n #Ingenting\\n{% endif -%}\\n\"\n font: ../../media/Abel-Regular.ttf\n start_y: '{{ gap_header + 1.5 * gap_title + 1 * gap_line + gap_days + ((count0\n + 1 ) * gap_text)}}\n\n '\n offset_y: 16\n delimiter: '#'\n size: 16\n x: 140\n color: black\n - type: text\n visible: '{{true if (count0+count1+count2) < 9 else false}}'\n value: '{{ days[(today_at(''00:00'')+ timedelta(days=2)).weekday()] }} {{\n (today_at(''00:00'') + timedelta(days=2)).day }}. {{ months[(today_at(''00:00'')+\n timedelta(days=2)).month-1] }} '\n font: ../../media/Bungee.ttf\n x: 140\n y: '{{ gap_header + 2 * gap_title + 4 * gap_line + gap_days + + (((count0\n + 1) + (count1 + 1)) * gap_text)}}\n\n '\n size: 16\n color: black\n - type: multiline\n value: \"{% if events_day2 | count > 0 %}\\n {% for event in (events_day2 |\\\n \\ sort(attribute='start') | list) -%} \\n {% if as_timestamp(event.start)\\\n \\ | timestamp_custom('%H:%M') == \\\"00:00\\\"%}\\n #Ganztägig - {{ event.summary\\\n \\ }}\\n {% else %}\\n #{% if as_timestamp(event.start) | timestamp_custom('%d%m%y')\\\n \\ != as_timestamp(event.end) | timestamp_custom('%d%m%y') %}{{ days[(as_timestamp(event.start)\\\n \\ | timestamp_custom('%w') | int)-1][:3] }} {% endif %}{{as_timestamp(event.start)\\\n \\ | timestamp_custom('%H:%M') }} - {% if as_timestamp(event.start) | timestamp_custom('%d%m%y')\\\n \\ != as_timestamp(event.end) | timestamp_custom('%d%m%y') %}{{ days[(as_timestamp(event.end)\\\n \\ | timestamp_custom('%w') | int)-1][:3] }}{% endif %} {{as_timestamp(event.end)\\\n \\ | timestamp_custom('%H:%M') }}: {{ event.summary }}\\n {% endif -%}\\n\\\n \\ {% endfor -%}\\n{% else %}\\n #Ingenting\\n{% endif -%}\\n\"\n font: ../../media/Abel-Regular.ttf\n start_y: '{{ gap_header + 3 * gap_title + 1 * gap_line + gap_days + (((count0\n + 1) + (count1 + 1)) * gap_text)}}\n\n '\n offset_y: 16\n delimiter: '#'\n size: 16\n x: 140\n color: black\n visible: '{{true if (count0+count1+count2) < 9 else false}}'\n - type: text\n visible: '{{true if (count0+count1+count2+count3) < 7 else false}}'\n value: '{{ days[(today_at(''00:00'') + timedelta(days=3)).weekday()] }} {{\n (today_at(''00:00'') + timedelta(days=3)).day }}. {{ months[(today_at(''00:00'')+\n timedelta(days=3)).month-1] }} '\n font: ../../media/Bungee.ttf\n x: 140\n y: '{{ gap_header + 3 * gap_title + 4 * gap_line + gap_days + + (((count0\n + 1) + (count1 + 1) + (count2 + 1)) * gap_text)}}\n\n '\n size: 16\n color: black\n - type: multiline\n value: \"{% if events_day3 | count > 0 %}\\n {% for event in (events_day3 |\\\n \\ sort(attribute='start') | list) -%} \\n {% if as_timestamp(event.start)\\\n \\ | timestamp_custom('%H:%M') == \\\"00:00\\\"%}\\n #Ganztägig - {{ event.summary\\\n \\ }}\\n {% else %}\\n #{% if as_timestamp(event.start) | timestamp_custom('%d%m%y')\\\n \\ != as_timestamp(event.end) | timestamp_custom('%d%m%y') %}{{ days[(as_timestamp(event.start)\\\n \\ | timestamp_custom('%w') | int)-1][:3] }} {% endif %}{{as_timestamp(event.start)\\\n \\ | timestamp_custom('%H:%M') }} - {% if as_timestamp(event.start) | timestamp_custom('%d%m%y')\\\n \\ != as_timestamp(event.end) | timestamp_custom('%d%m%y') %}{{ days[(as_timestamp(event.end)\\\n \\ | timestamp_custom('%w') | int)-1][:3] }}{% endif %} {{as_timestamp(event.end)\\\n \\ | timestamp_custom('%H:%M') }}: {{ event.summary }}\\n {% endif -%}\\n\\\n \\ {% endfor -%}\\n{% else %}\\n #Ingenting\\n{% endif -%}\\n\"\n font: ../../media/Abel-Regular.ttf\n start_y: '{{ gap_header + 4 * gap_title + 1 * gap_line + gap_days + (((count0\n + 1) + (count1 + 1) + (count2 + 1)) * gap_text)}}\n\n '\n offset_y: 16\n delimiter: '#'\n size: 16\n x: 140\n visible: '{{true if (count0+count1+count2+count3) < 7 else false}}'\n color: black\n target:\n device_id: xxxxxxxxxxxxxxxxxx\n action: open_epaper_link.drawcustom\n mode: restart",
|
||
"config": [
|
||
{
|
||
"name": "Pirate Weather Daily",
|
||
"room": null,
|
||
"type": "sensor",
|
||
"id": {
|
||
"entity_id": "sensor.pirate_weather_daily",
|
||
"device_id": null
|
||
}
|
||
},
|
||
{
|
||
"name": "Living Room Temperature",
|
||
"room": "living_room",
|
||
"type": "sensor",
|
||
"id": {
|
||
"entity_id": "SENSOR.LIVINGROOMTEMPERATURE",
|
||
"device_id": null
|
||
}
|
||
},
|
||
{
|
||
"name": "Outdoor Temperature",
|
||
"room": "outdoor",
|
||
"type": "sensor",
|
||
"id": {
|
||
"entity_id": "SENSOR.OUTDOORTEMPERATURE",
|
||
"device_id": null
|
||
}
|
||
},
|
||
{
|
||
"name": "E-Paper Device 2",
|
||
"room": null,
|
||
"type": "device",
|
||
"id": {
|
||
"entity_id": null,
|
||
"device_id": "xxxxxxxxxxxxxxxxx"
|
||
}
|
||
},
|
||
{
|
||
"name": "E-Paper Device 3",
|
||
"room": null,
|
||
"type": "device",
|
||
"id": {
|
||
"entity_id": null,
|
||
"device_id": "xxxxxxxxxxxxxxxxxx"
|
||
}
|
||
},
|
||
{
|
||
"name": "E-Paper Device 4",
|
||
"room": null,
|
||
"type": "device",
|
||
"id": {
|
||
"entity_id": null,
|
||
"device_id": "xxxxxxxxxxxxxxxx"
|
||
}
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "Witz und Zitat des Tages",
|
||
"automation": "- alias: Witz und Zitat des Tages\n description: Zeigt täglich einen Witz + Zitat in 6 Zeilen (stabil formatiert)\n triggers:\n - trigger: time\n at: 00:00:01\n conditions: []\n actions:\n - data:\n background: white\n rotate: 0\n dry-run: false\n payload:\n - type: text\n value: Witz des Tages\n x: 5\n y: 5\n size: 16\n font: ../../media/Bungee.ttf\n color: black\n - type: line\n x_start: 0\n x_end: 380\n y_start: 22\n y_end: 22\n width: 1\n dashed: false\n fill: black\n - type: text\n value: '{{ line1 }}'\n x: 10\n y: 28\n size: 16\n font: ../../media/Abel-Regular.ttf\n color: black\n - type: text\n value: '{{ line2 }}'\n x: 10\n y: 46\n size: 16\n font: ../../media/Abel-Regular.ttf\n color: black\n - type: text\n value: '{{ line3 }}'\n x: 10\n y: 64\n size: 16\n font: ../../media/Abel-Regular.ttf\n color: black\n - type: line\n x_start: 0\n x_end: 380\n y_start: 108\n y_end: 108\n width: 1\n dashed: false\n fill: black\n - type: text\n value: Zitat des Tages\n x: 5\n y: 92\n size: 16\n font: ../../media/Bungee.ttf\n color: black\n - type: text\n value: '{{ quote_line1 }}'\n x: 10\n y: 115\n size: 16\n font: ../../media/Abel-Regular.ttf\n color: black\n - type: text\n value: '{{ quote_line2 }}'\n x: 10\n y: 133\n size: 16\n font: ../../media/Abel-Regular.ttf\n color: black\n - type: text\n value: '{{ quote_line3 }}'\n x: 10\n y: 151\n size: 16\n font: ../../media/Abel-Regular.ttf\n color: black\n - type: text\n value: '{{ as_timestamp(now()) | timestamp_custom(''%d%m%H%M'') }}'\n x: 332\n y: 2\n size: 10\n font: ../../media/GothamRnd_Bold.ttf\n target:\n device_id: xxxxxxxxxxxxxxxx\n action: open_epaper_link.drawcustom\n variables:\n jokes:\n - - Warum können Geister so schlecht lügen?\n - Weil man durch sie hindurchsieht!\n - Die Ausreden sind durchsichtig wie Glas!\n - - Was macht ein Pirat am Computer?\n - Enter drücken - er ist doch ein Seemann!\n - 'Lieblingsprogramm: Arrrrr-drobe Reader!'\n - - Ein Witz über Zeitreisen.\n - Aber du wirst ihn nicht mögen.\n - Du hast gestern schon darüber gelacht!\n - - Warum tragen Wissenschaftler keine Brille?\n - Weil sie alles unter die Lupe nehmen!\n - ''\n - - Wie nennt man einen Bumerang ohne Rückkehr?\n - Einen Stock!\n - ''\n - - 'Mama: Wo ist das Sieb?'\n - 'Fritzchen: Hab es weggeworfen - da waren'\n - so viele Löcher drin.\n - - 'Wichtige Erkenntnis nach dem Urlaub:'\n - Gebräunte Haut macht 3kg schwerer!\n - ''\n - - 'Mann an der Theke:'\n - Werfen Sie mir einen Fisch zu!\n - Dann kann ich sagen, ich hätte ihn gefangen!\n - - 'Türklingel: Wir sammeln fürs Kinderheim.'\n - Haben Sie etwas abzugeben?\n - Kevin, Justin – kommt mal her!\n - - Warum hat der Computer Hunger?\n - Er will ständig Cookies!\n - Aber bitte ohne Viren!\n - - 'Lehrer: 75% haben eine 5 im Test!'\n - 'Fritzchen: So viele sind wir gar nicht!'\n - ''\n - - Treffen sich zwei Unsichtbare.\n - Lange nicht gesehen!\n - ''\n - - Egal wie viele CDs du hast,\n - Carl Benz hatte Mercedes.\n - ''\n - - 'Mutter zur Tochter am Samstag:'\n - Wenn du um 11 nicht im Bett bist,\n - komm nach Hause!\n - - Blondine wirft Handgranate?\n - Sicherheitsstöpsel ziehen und zurückwerfen.\n - ''\n - - Was ist unter der Kellertreppe?\n - Eine Blondine beim Verstecken!\n - ''\n - - Wie kommt die Blondine an Marmelade?\n - Sie schält einen Berliner.\n - ''\n - - Egal wie viel du Ursula schuldest,\n - du kannst dir was Von der Leyen.\n - ''\n - - Ostfriesen-Toiletten ohne Türen?\n - Damit keiner durchs Schlüsselloch guckt!\n - ''\n - - Wie wird bei Ostfriesen das Bild schärfer?\n - Sie streuen Pfeffer drauf.\n - ''\n - - Ein Bahnwitz...\n - Weiß nicht, ob der ankommt.\n - ''\n - - Warum sind Süchtige pleite?\n - Zu hohe Fixkosten.\n - ''\n - - Was ist weiß und stört beim Frühstück?\n - Eine Lawine!\n - ''\n - - Grün, 6 Beine, fliegt auf dich zu?\n - Ein Billardtisch!\n - ''\n - - 'Opas letzte Worte:'\n - Hör auf an der Leiter zu wackeln!\n - ''\n - - Warum stehen Flamingos auf einem Bein?\n - Sonst fallen sie um!\n - ''\n - - Was ist rot und schlecht für Zähne?\n - Ein Ziegelstein!\n - ''\n - - Gelb, ein Arm, kann nicht schwimmen?\n - Ein Bagger!\n - ''\n - - Warum ist Hühnchen nicht vegan?\n - Weil da Ei drin ist!\n - ''\n - - Warum gehen Ameisen nicht in die Kirche?\n - Weil sie Insekten sind!\n - ''\n - - Was ist pink und behindert?\n - Ein Flamongo!\n - ''\n - - 'Zwei Fakten über mich:'\n - 1. Penis wie 6 Nuggets\n - 2. Hausverbot bei McDonalds\n - - Schrottwichteln im Kindergarten.\n - Wir sind jetzt Kevins Eltern.\n - ''\n - - Wie nennt man falsche Werfer?\n - Scheinwerfer!\n - ''\n - - 'Prostituierte am Bahnhof:'\n - Macht alles für 30 Euro.\n - Verlegt jetzt bei mir Laminat.\n quotes:\n - - Die einzige Konstante im Leben ist die Veränderung.\n - Heraklit\n - - Wer Fehler macht, zeigt Initiative.\n - Unbekannt\n - - Optimisten leben länger. Pessimisten länger gesund.\n - Joachim Fuchsberger\n - - Der frühe Vogel fängt den Wurm,\n - aber die zweite Maus bekommt den Käse.\n - Deutsche Weisheit\n - - Du bist nie zu alt, um jung zu sein.\n - Walt Disney\n - - Leben ist das, was passiert,\n - während du andere Pläne machst.\n - John Lennon\n - - Die Dosis macht das Gift.\n - Paracelsus\n - - Man sieht nur mit dem Herzen gut.\n - Antoine de Saint-Exupéry\n - - Wer kämpft, kann verlieren.\n - Wer nicht kämpft, hat schon verloren.\n - Bertolt Brecht\n - - Das Gegenteil von gut ist gut gemeint.\n - Kurt Tucholsky\n - - Nichts ist mächtiger als eine Idee,\n - deren Zeit gekommen ist.\n - Victor Hugo\n - - Ich bin ein Teil von jener Kraft,\n - die stets das Böse will und stets das Gute schafft.\n - Goethe\n - - Wer andere kennt, ist klug.\n - Wer sich kennt, ist weise.\n - Laotse\n - - Glück ist das Einzige, was sich verdoppelt,\n - wenn man es teilt.\n - Albert Schweitzer\n - - Die Wahrheit ist dem Menschen zumutbar.\n - Ingeborg Bachmann\n - - Humor ist der Knopf, der verhindert,\n - dass uns der Kragen platzt.\n - Joachim Ringelnatz\n - - Nur wer erwachsen wird und Kind bleibt,\n - ist ein Mensch.\n - Erich Kästner\n - - Die Grenzen meiner Sprache bedeuten\n - die Grenzen meiner Welt.\n - Ludwig Wittgenstein\n - - Phantasie ist wichtiger als Wissen,\n - denn Wissen ist begrenzt.\n - Albert Einstein\n - - Man liebt zuletzt seine Begierde,\n - und nicht das Begehrte.\n - Friedrich Nietzsche\n - - Die Welt wird nicht bedroht von den Bösen,\n - sondern von denen, die das zulassen.\n - Albert Einstein\n - - Das Leben ist zu kurz für lange Gesichter.\n - Robert Gernhardt\n - - Wer keine Visionen hat,\n - sollte zum Augenarzt gehen.\n - Helmut Schmidt\n - - Die Kunst ist, einmal mehr aufzustehen,\n - als man umgeworfen wird.\n - Winston Churchill\n - - Es gibt nichts Gutes,\n - außer man tut es.\n - Erich Kästner\n - - Wer glaubt, etwas zu sein,\n - hat aufgehört, etwas zu werden.\n - Sokrates\n - - Das Geheimnis der Langeweile ist,\n - alles zu sagen, was man weiß.\n - Voltaire\n - - Wer andere beurteilt,\n - arbeitet nicht an sich selbst.\n - Buddha\n - - Weniger ist mehr.\n - Ludwig Mies van der Rohe\n - - Die Wahrheit liegt im Auge\n - des Betrachters.\n - Mark Twain\n - - Nichts ist so beständig wie der Wandel.\n - Heraklit\n - - Wer die Wahrheit sagt,\n - braucht ein schnelles Pferd.\n - Chinesisches Sprichwort\n - - Man muss noch Chaos in sich haben,\n - um einen tanzenden Stern zu gebären.\n - Nietzsche\n - - 'Die größte Entscheidung deines Lebens:'\n - Dass du es ändern kannst.\n - Albert Camus\n - - Tue Gutes und rede darüber.\n - Konrad Adenauer\n - - 'Das Leben ist wie ein Fahrrad:'\n - Um die Balance zu halten, musst du fahren.\n - Albert Einstein\n - - Die beste Antwort auf Wut ist Schweigen.\n - Mahatma Gandhi\n - - Wer die Vergangenheit kontrolliert,\n - kontrolliert die Zukunft.\n - George Orwell\n - - Man sieht die Sonne untergehen,\n - und doch ist es immer plötzlich.\n - Pablo Neruda\n - - Die Freiheit des Einzelnen endet dort,\n - wo die Freiheit des Anderen beginnt.\n - Immanuel Kant\n - - Habe den Mut,\n - dich deines eigenen Verstandes zu bedienen!\n - Immanuel Kant\n - - Alles Einfache ist falsch.\n - Alles Komplexe ist unbrauchbar.\n - Paul Valéry\n - - Wer schreibt, der bleibt.\n - Altes Sprichwort\n - - Zweifel sind der Beginn der Weisheit.\n - René Descartes\n - - Die Zukunft gehört denen,\n - die an ihre Träume glauben.\n - Eleanor Roosevelt\n - - Handle nur nach der Maxime,\n - die ein allgemeines Gesetz werden kann.\n - Immanuel Kant\n - - Der Weg ist das Ziel.\n - Konfuzius\n - - Erst denken, dann handeln.\n - Altes Sprichwort\n - - Wer A sagt, muss nicht B sagen.\n - Er kann auch erkennen, dass A falsch war.\n - Bertolt Brecht\n - - Die Kunst liegt darin,\n - öfter aufzustehen als umgeworfen zu werden.\n - Konfuzius\n joke: '{{ jokes | random }}'\n quote: '{{ quotes | random }}'\n line1: '{{ joke[0] }}'\n line2: '{{ joke[1] }}'\n line3: '{{ joke[2] }}'\n quote_line1: '{{ quote[0] }}'\n quote_line2: '{{ quote[1] }}'\n quote_line3: '{{ quote[2] }}'\n mode: single",
|
||
"config": [
|
||
{
|
||
"name": "E-Paper Device 4",
|
||
"room": null,
|
||
"type": "device",
|
||
"id": {
|
||
"entity_id": null,
|
||
"device_id": "xxxxxxxxxxxxxxxx"
|
||
}
|
||
}
|
||
]
|
||
}
|
||
] |