tekstitv_401:
sensor:
- platform: rest
name: tekstitv_401_p1a
resource: https://yle.fi/tekstitv/txt/401_0001.htm
headers:
User-Agent: "Mozilla/5.0"
Accept-Language: "fi-FI, fi;q=0.9"
timeout: 20
scan_interval: 900
value_template: >-
{% set raw = value | default('', true) %}
{% set pre = raw | regex_findall_index('(?is)]*>(.*?)
', 0) | default('', true) %}
{% set t = pre
| regex_replace('-\\s*\\n', '')
| regex_replace(' ', ' ')
| regex_replace('ä', 'ä') | regex_replace('Ä', 'Ä')
| regex_replace('ö', 'ö') | regex_replace('Ö', 'Ö')
| regex_replace('å', 'å') | regex_replace('Å', 'Å')
| regex_replace('&', '&')
| regex_replace('\\r', '')
| regex_replace('[ \\t]+', ' ')
| regex_replace('\\n\\s*\\n', '\n')
| trim %}
{% set low = t | lower %}
{% set starts = [
'koillismaalla ja lapissa:', 'koillismaalla sekä lapissa:',
'lapissa:', 'lapissa',
'meri-lapissa:', 'meri-lapissa',
'merilapissa:', 'merilapissa',
'pohjoisessa:', 'pohjoisessa',
'maan pohjoisosassa:', 'maan pohjoisosassa'
] %}
{% set s = -1 %}
{% for k in starts %}
{% set i = low.find(k) %}
{% if i != -1 and (s == -1 or i < s) %}
{% set s = i %}
{% endif %}
{% endfor %}
{% set e = low.find('liikennesää', s if s!=-1 else 0) %}
{% set picked = s!=-1 and e!=-1 and e>s and t[s:e] or s!=-1 and t[s:] or '' %}
{{ picked[:200] | trim }}
- platform: rest
name: tekstitv_401_p1b
resource: https://yle.fi/tekstitv/txt/401_0001.htm
headers:
User-Agent: "Mozilla/5.0"
Accept-Language: "fi-FI, fi;q=0.9"
timeout: 20
scan_interval: 900
value_template: >-
{% set raw = value | default('', true) %}
{% set pre = raw | regex_findall_index('(?is)]*>(.*?)
', 0) | default('', true) %}
{% set t = pre
| regex_replace('-\\s*\\n', '')
| regex_replace(' ', ' ')
| regex_replace('ä', 'ä') | regex_replace('Ä', 'Ä')
| regex_replace('ö', 'ö') | regex_replace('Ö', 'Ö')
| regex_replace('å', 'å') | regex_replace('Å', 'Å')
| regex_replace('&', '&')
| regex_replace('\\r', '')
| regex_replace('[ \\t]+', ' ')
| regex_replace('\\n\\s*\\n', '\n')
| trim %}
{% set low = t | lower %}
{% set starts = [
'koillismaalla ja lapissa:', 'koillismaalla sekä lapissa:',
'lapissa:', 'lapissa',
'meri-lapissa:', 'meri-lapissa',
'merilapissa:', 'merilapissa',
'pohjoisessa:', 'pohjoisessa',
'maan pohjoisosassa:', 'maan pohjoisosassa'
] %}
{% set s = -1 %}
{% for k in starts %}
{% set i = low.find(k) %}
{% if i != -1 and (s == -1 or i < s) %}
{% set s = i %}
{% endif %}
{% endfor %}
{% set e = low.find('liikennesää', s if s!=-1 else 0) %}
{% set picked = s!=-1 and e!=-1 and e>s and t[s:e] or s!=-1 and t[s:] or '' %}
{{ picked[200:400] | trim }}
- platform: rest
name: tekstitv_401_p1c
resource: https://yle.fi/tekstitv/txt/401_0001.htm
headers:
User-Agent: "Mozilla/5.0"
Accept-Language: "fi-FI, fi;q=0.9"
timeout: 20
scan_interval: 900
value_template: >-
{% set raw = value | default('', true) %}
{% set pre = raw | regex_findall_index('(?is)]*>(.*?)
', 0) | default('', true) %}
{% set t = pre
| regex_replace('-\\s*\\n', '')
| regex_replace(' ', ' ')
| regex_replace('ä', 'ä') | regex_replace('Ä', 'Ä')
| regex_replace('ö', 'ö') | regex_replace('Ö', 'Ö')
| regex_replace('å', 'å') | regex_replace('Å', 'Å')
| regex_replace('&', '&')
| regex_replace('\\r', '')
| regex_replace('[ \\t]+', ' ')
| regex_replace('\\n\\s*\\n', '\n')
| trim %}
{% set low = t | lower %}
{% set starts = [
'koillismaalla ja lapissa:', 'koillismaalla sekä lapissa:',
'lapissa:', 'lapissa',
'meri-lapissa:', 'meri-lapissa',
'merilapissa:', 'merilapissa',
'pohjoisessa:', 'pohjoisessa',
'maan pohjoisosassa:', 'maan pohjoisosassa'
] %}
{% set s = -1 %}
{% for k in starts %}
{% set i = low.find(k) %}
{% if i != -1 and (s == -1 or i < s) %}
{% set s = i %}
{% endif %}
{% endfor %}
{% set e = low.find('liikennesää', s if s!=-1 else 0) %}
{% set picked = s!=-1 and e!=-1 and e>s and t[s:e] or s!=-1 and t[s:] or '' %}
{{ picked[400:600] | trim }}
- platform: rest
name: tekstitv_401_p2a
resource: https://yle.fi/tekstitv/txt/401_0002.htm
headers:
User-Agent: "Mozilla/5.0"
Accept-Language: "fi-FI, fi;q=0.9"
timeout: 20
scan_interval: 900
value_template: >-
{% set raw = value | default('', true) %}
{% set pre = raw | regex_findall_index('(?is)]*>(.*?)
', 0) | default('', true) %}
{% set t = pre
| regex_replace('-\\s*\\n', '')
| regex_replace(' ', ' ')
| regex_replace('ä', 'ä') | regex_replace('Ä', 'Ä')
| regex_replace('ö', 'ö') | regex_replace('Ö', 'Ö')
| regex_replace('å', 'å') | regex_replace('Å', 'Å')
| regex_replace('&', '&')
| regex_replace('\\r', '')
| regex_replace('[ \\t]+', ' ')
| regex_replace('\\n\\s*\\n', '\n')
| trim %}
{% set low = t | lower %}
{% set starts = [
'koillismaalla ja lapissa:', 'koillismaalla sekä lapissa:',
'lapissa:', 'lapissa',
'meri-lapissa:', 'meri-lapissa',
'merilapissa:', 'merilapissa',
'pohjoisessa:', 'pohjoisessa',
'maan pohjoisosassa:', 'maan pohjoisosassa'
] %}
{% set s = -1 %}
{% for k in starts %}
{% set i = low.find(k) %}
{% if i != -1 and (s == -1 or i < s) %}
{% set s = i %}
{% endif %}
{% endfor %}
{% set e = low.find('liikennesää', 0) %}
{% set picked = s!=-1 and e!=-1 and e>s and t[s:e]
or s!=-1 and t[s:]
or e!=-1 and t[:e]
or '' %}
{{ picked[:200] | trim }}
- platform: rest
name: tekstitv_401_p2b
resource: https://yle.fi/tekstitv/txt/401_0002.htm
headers:
User-Agent: "Mozilla/5.0"
Accept-Language: "fi-FI, fi;q=0.9"
timeout: 20
scan_interval: 900
value_template: >-
{% set raw = value | default('', true) %}
{% set pre = raw | regex_findall_index('(?is)]*>(.*?)
', 0) | default('', true) %}
{% set t = pre
| regex_replace('-\\s*\\n', '')
| regex_replace(' ', ' ')
| regex_replace('ä', 'ä') | regex_replace('Ä', 'Ä')
| regex_replace('ö', 'ö') | regex_replace('Ö', 'Ö')
| regex_replace('å', 'å') | regex_replace('Å', 'Å')
| regex_replace('&', '&')
| regex_replace('\\r', '')
| regex_replace('[ \\t]+', ' ')
| regex_replace('\\n\\s*\\n', '\n')
| trim %}
{% set low = t | lower %}
{% set starts = [
'koillismaalla ja lapissa:', 'koillismaalla sekä lapissa:',
'lapissa:', 'lapissa',
'meri-lapissa:', 'meri-lapissa',
'merilapissa:', 'merilapissa',
'pohjoisessa:', 'pohjoisessa',
'maan pohjoisosassa:', 'maan pohjoisosassa'
] %}
{% set s = -1 %}
{% for k in starts %}
{% set i = low.find(k) %}
{% if i != -1 and (s == -1 or i < s) %}
{% set s = i %}
{% endif %}
{% endfor %}
{% set e = low.find('liikennesää', 0) %}
{% set picked = s!=-1 and e!=-1 and e>s and t[s:e]
or s!=-1 and t[s:]
or e!=-1 and t[:e]
or '' %}
{{ picked[200:400] | trim }}
- platform: rest
name: tekstitv_401_p2c
resource: https://yle.fi/tekstitv/txt/401_0002.htm
headers:
User-Agent: "Mozilla/5.0"
Accept-Language: "fi-FI, fi;q=0.9"
timeout: 20
scan_interval: 900
value_template: >-
{% set raw = value | default('', true) %}
{% set pre = raw | regex_findall_index('(?is)]*>(.*?)
', 0) | default('', true) %}
{% set t = pre
| regex_replace('-\\s*\\n', '')
| regex_replace(' ', ' ')
| regex_replace('ä', 'ä') | regex_replace('Ä', 'Ä')
| regex_replace('ö', 'ö') | regex_replace('Ö', 'Ö')
| regex_replace('å', 'å') | regex_replace('Å', 'Å')
| regex_replace('&', '&')
| regex_replace('\\r', '')
| regex_replace('[ \\t]+', ' ')
| regex_replace('\\n\\s*\\n', '\n')
| trim %}
{% set low = t | lower %}
{% set starts = [
'koillismaalla ja lapissa:', 'koillismaalla sekä lapissa:',
'lapissa:', 'lapissa',
'meri-lapissa:', 'meri-lapissa',
'merilapissa:', 'merilapissa',
'pohjoisessa:', 'pohjoisessa',
'maan pohjoisosassa:', 'maan pohjoisosassa'
] %}
{% set s = -1 %}
{% for k in starts %}
{% set i = low.find(k) %}
{% if i != -1 and (s == -1 or i < s) %}
{% set s = i %}
{% endif %}
{% endfor %}
{% set e = low.find('liikennesää', 0) %}
{% set picked = s!=-1 and e!=-1 and e>s and t[s:e]
or s!=-1 and t[s:]
or e!=-1 and t[:e]
or '' %}
{{ picked[400:600] | trim }}
- platform: rest
name: tekstitv_401_p3a
resource: https://yle.fi/tekstitv/txt/401_0003.htm
headers:
User-Agent: "Mozilla/5.0"
Accept-Language: "fi-FI, fi;q=0.9"
timeout: 20
scan_interval: 900
value_template: >-
{% set raw = value | default('', true) %}
{% set pre = raw | regex_findall_index('(?is)]*>(.*?)
', 0) | default('', true) %}
{% set t = pre
| regex_replace('-\\s*\\n', '')
| regex_replace(' ', ' ')
| regex_replace('ä', 'ä') | regex_replace('Ä', 'Ä')
| regex_replace('ö', 'ö') | regex_replace('Ö', 'Ö')
| regex_replace('å', 'å') | regex_replace('Å', 'Å')
| regex_replace('&', '&')
| regex_replace('\\r', '')
| regex_replace('[ \\t]+', ' ')
| regex_replace('\\n\\s*\\n', '\n')
| trim %}
{% set low = t | lower %}
{% set starts = [
'koillismaalla ja lapissa:', 'koillismaalla sekä lapissa:',
'lapissa:', 'lapissa',
'meri-lapissa:', 'meri-lapissa',
'merilapissa:', 'merilapissa',
'pohjoisessa:', 'pohjoisessa',
'maan pohjoisosassa:', 'maan pohjoisosassa'
] %}
{% set s = -1 %}
{% for k in starts %}
{% set i = low.find(k) %}
{% if i != -1 and (s == -1 or i < s) %}
{% set s = i %}
{% endif %}
{% endfor %}
{% set e = low.find('liikennesää', 0) %}
{% set picked = s!=-1 and e!=-1 and e>s and t[s:e]
or e!=-1 and t[:e]
or '' %}
{{ picked[:200] | trim }}
- platform: rest
name: tekstitv_401_p3b
resource: https://yle.fi/tekstitv/txt/401_0003.htm
headers:
User-Agent: "Mozilla/5.0"
Accept-Language: "fi-FI, fi;q=0.9"
timeout: 20
scan_interval: 900
value_template: >-
{% set raw = value | default('', true) %}
{% set pre = raw | regex_findall_index('(?is)]*>(.*?)
', 0) | default('', true) %}
{% set t = pre
| regex_replace('-\\s*\\n', '')
| regex_replace(' ', ' ')
| regex_replace('ä', 'ä') | regex_replace('Ä', 'Ä')
| regex_replace('ö', 'ö') | regex_replace('Ö', 'Ö')
| regex_replace('å', 'å') | regex_replace('Å', 'Å')
| regex_replace('&', '&')
| regex_replace('\\r', '')
| regex_replace('[ \\t]+', ' ')
| regex_replace('\\n\\s*\\n', '\n')
| trim %}
{% set low = t | lower %}
{% set starts = [
'koillismaalla ja lapissa:', 'koillismaalla sekä lapissa:',
'lapissa:', 'lapissa',
'meri-lapissa:', 'meri-lapissa',
'merilapissa:', 'merilapissa',
'pohjoisessa:', 'pohjoisessa',
'maan pohjoisosassa:', 'maan pohjoisosassa'
] %}
{% set s = -1 %}
{% for k in starts %}
{% set i = low.find(k) %}
{% if i != -1 and (s == -1 or i < s) %}
{% set s = i %}
{% endif %}
{% endfor %}
{% set e = low.find('liikennesää', 0) %}
{% set picked = s!=-1 and e!=-1 and e>s and t[s:e]
or e!=-1 and t[:e]
or '' %}
{{ picked[200:400] | trim }}
- platform: rest
name: tekstitv_401_p3c
resource: https://yle.fi/tekstitv/txt/401_0003.htm
headers:
User-Agent: "Mozilla/5.0"
Accept-Language: "fi-FI, fi;q=0.9"
timeout: 20
scan_interval: 900
value_template: >-
{% set raw = value | default('', true) %}
{% set pre = raw | regex_findall_index('(?is)]*>(.*?)
', 0) | default('', true) %}
{% set t = pre
| regex_replace('-\\s*\\n', '')
| regex_replace(' ', ' ')
| regex_replace('ä', 'ä') | regex_replace('Ä', 'Ä')
| regex_replace('ö', 'ö') | regex_replace('Ö', 'Ö')
| regex_replace('å', 'å') | regex_replace('Å', 'Å')
| regex_replace('&', '&')
| regex_replace('\\r', '')
| regex_replace('[ \\t]+', ' ')
| regex_replace('\\n\\s*\\n', '\n')
| trim %}
{% set low = t | lower %}
{% set starts = [
'koillismaalla ja lapissa:', 'koillismaalla sekä lapissa:',
'lapissa:', 'lapissa',
'meri-lapissa:', 'meri-lapissa',
'merilapissa:', 'merilapissa',
'pohjoisessa:', 'pohjoisessa',
'maan pohjoisosassa:', 'maan pohjoisosassa'
] %}
{% set s = -1 %}
{% for k in starts %}
{% set i = low.find(k) %}
{% if i != -1 and (s == -1 or i < s) %}
{% set s = i %}
{% endif %}
{% endfor %}
{% set e = low.find('liikennesää', 0) %}
{% set picked = s!=-1 and e!=-1 and e>s and t[s:e]
or e!=-1 and t[:e]
or '' %}
{{ picked[400:600] | trim }}
template:
- sensor:
- name: saa_pohjoisosat_tekstitv_osa1
state: >-
{% set parts = [
states('sensor.tekstitv_401_p1a'), states('sensor.tekstitv_401_p1b'), states('sensor.tekstitv_401_p1c'),
states('sensor.tekstitv_401_p2a'), states('sensor.tekstitv_401_p2b'), states('sensor.tekstitv_401_p2c'),
states('sensor.tekstitv_401_p3a'), states('sensor.tekstitv_401_p3b'), states('sensor.tekstitv_401_p3c')
] %}
{% set cleaned = parts | reject('in', ['unknown','unavailable','ei tilaa','']) | list %}
{% set raw = cleaned | join('') %}
{% if not raw %} ei saatavilla {% else %}
{% set t = raw
| regex_replace('(?i)\\b\\d+/\\d+\\b', '')
| regex_replace('(?i)ilmatieteen\\s+laitos\\s+\\d{1,2}\\.\\d{1,2}\\.?', '')
| regex_replace('(?i)säätiedotus\\s+klo\\s*\\d{1,2}', '')
%}
{% set low = t | lower %}
{% set e = low.find('liikennesää') %}
{% set upto = (t[:e] if e != -1 else t) %}
{% set low2 = upto | lower %}
{% set starts = [
'koillismaalla ja lapissa:', 'koillismaalla sekä lapissa:',
'lapissa:', 'lapissa',
'meri-lapissa:', 'meri-lapissa', 'merilapissa:', 'merilapissa',
'pohjoisessa:', 'pohjoisessa',
'maan pohjoisosassa:', 'maan pohjoisosassa'
] %}
{% set s = -1 %}
{% for k in starts %}
{% set i = low2.find(k) %}
{% if i != -1 and (s == -1 or i < s) %}{% set s = i %}{% endif %}
{% endfor %}
{% set text = (upto[s:] if s != -1 else upto)
| regex_replace('\\s+',' ')
| trim %}
{% set p1 = text[:200] | trim %}
{% set p2 = text[200:400] | trim %}
{{ p1 ~ (' (jatkuu...)' if p2 else '') if p1 else 'ei saatavilla' }}
{% endif %}
- name: saa_pohjoisosat_tekstitv_osa2
state: >-
{% set parts = [
states('sensor.tekstitv_401_p1a'), states('sensor.tekstitv_401_p1b'), states('sensor.tekstitv_401_p1c'),
states('sensor.tekstitv_401_p2a'), states('sensor.tekstitv_401_p2b'), states('sensor.tekstitv_401_p2c'),
states('sensor.tekstitv_401_p3a'), states('sensor.tekstitv_401_p3b'), states('sensor.tekstitv_401_p3c')
] %}
{% set cleaned = parts | reject('in', ['unknown','unavailable','ei tilaa','']) | list %}
{% set raw = cleaned | join('') %}
{% if not raw %} '' {% else %}
{% set t = raw
| regex_replace('(?i)\\b\\d+/\\d+\\b', '')
| regex_replace('(?i)ilmatieteen\\s+laitos\\s+\\d{1,2}\\.\\d{1,2}\\.?', '')
| regex_replace('(?i)säätiedotus\\s+klo\\s*\\d{1,2}', '')
%}
{% set low = t | lower %}
{% set e = low.find('liikennesää') %}
{% set upto = (t[:e] if e != -1 else t) %}
{% set low2 = upto | lower %}
{% set starts = [
'koillismaalla ja lapissa:', 'koillismaalla sekä lapissa:',
'lapissa:', 'lapissa',
'meri-lapissa:', 'meri-lapissa', 'merilapissa:', 'merilapissa',
'pohjoisessa:', 'pohjoisessa',
'maan pohjoisosassa:', 'maan pohjoisosassa'
] %}
{% set s = -1 %}
{% for k in starts %}
{% set i = low2.find(k) %}
{% if i != -1 and (s == -1 or i < s) %}{% set s = i %}{% endif %}
{% endfor %}
{% set text = (upto[s:] if s != -1 else upto)
| regex_replace('\\s+',' ')
| trim %}
{% if text | length <= 200 %} '' {% else %} {{ text[200:400] | trim }} {% endif %}
{% endif %}