CCCPaste

9eb56de985076

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 %}