Syntax na priradenie premennej

Co umí šablony a jak je využívat.
lubost
Pokročilý
Pokročilý
Příspěvky: 112
Registrován: 03. duben 2021, 15:19
Dal poděkování: 2 poděkování
Dostal poděkování: 4 poděkování

Syntax na priradenie premennej

Příspěvek od lubost »

Zdravím,
v inom vlákne sme načali niečo o šablónach a premenných, strávil som niekoľko dlhých večerov hľadaním a bádaním...
Mám v pomocníkoch vytvorené premenné, ktoré plánujem využiť v automatizácii... len ich chcem v čase meniť.
Niečo som pochopil, s niečim sa stále trápim.
Ak chcem v šablóne klasicky vnulovať premennú, aby som následne do nej zapísal hodnotu teploty jednej z izieb, tak končím na chybe, že nemám priradenú konštantu (táto chyba sa objaví už pri prvom riadku, priradení nuly)

Kód: Vybrat vše

{% set input_number.teplota_aktualna_priemer = 0 %} 
{% set input_number.teplota_aktualna_priemer = states("sensor.detska_teplomer_teplota")  | float +  input_number.teplota_aktualna_priemer %} 
TemplateSyntaxError: can't assign to 'const'


Ak namiesto premennej z pomocníka si do skriptu vymyslím iné premenné (doteraz nikde nedefinované), všetko funguje OK. Či použijem na pravej strane hodnotu zo senzora (teplota), alebo hodnotu z pomocníka (nastavená požadovaná teplota), v pohode sa vykonajú matematické ukony a výsledok sa priradí do vymyslenej premennej.

Kód: Vybrat vše

{% set pozadovana_teplota  = 0 %}
{% set aktualna_teplota  = 0 %}
{% set pocet_na_priemer  = 0 %}

{% if states("input_boolean.kurenie_detska")=='on' and states("binary_sensor.okno_hore_detska_contact")=='off'     %}
{% set pozadovana_teplota   = states("input_number.temp_detska_vyssia")  | float - states("input_number.temp_znizenie_pomocny") | float + pozadovana_teplota %}
{% set aktualna_teplota   = states("sensor.detska_teplomer_teplota")  | float +  aktualna_teplota %}
{% set pocet_na_priemer  = pocet_na_priemer + 1 %}
{%- endif %}
Detska pozadovana: {{ pozadovana_teplota }}
Detska aktualna: {{ aktualna_teplota }}
Priemer: {{ pocet_na_priemer }}
A takto pokračujem s ďalšou a ďalšou izbou, následne viem vypočítať priemer žiadanej a aktuálnej teploty iba z tých izieb, kde sa ešte má kúriť a okno nie je otvorené... Ak celý skript vložím do vývojarskeho nástroja - šablóny, v závere mám hodnoty, ktoré očakávam, presne reagujú na to, čo požadujem.
Lenže následne neviem tento výsledok prakticky nikde použiť, pretože reálne takáto entita neexistuje. Aktuálne cez "average senzor" zasielam do termostatu priemernú požadovanú teplotu:

Kód: Vybrat vše

service: mqtt.publish
data:
  topic: opentherm-thermostat/current-temperature/set
  payload: '{{states("sensor.priemerna_teplota_hore")}}'
Ak hodnotu tohto senzora nahradím vypočítanou hodnotou, tak v termostate sa objaví nula
payload: '{{states("pozadovana_teplota")}}'
(skúšal som rôzne zápisy, napr. payload: '{{ pozadovana_teplota }}')

Skúšal som na záver priradiť hodnotu vypočítanej premennej do premennej definovanej v pomocníkovi, opäť rovnaká chyba. Skúšam googliť s danou chybou, ale neviem natrafiť na podobný problém, akú vlastne voliť syntax.

Pri takomto zápise:
{% set input_number.teplota_aktualna_priemer = input_number.teplota_aktualna_priemer + states("sensor.obyvacka_teplomer_teplota") | float %}
mám zase takúto chybu: TemplateRuntimeError: cannot assign attribute on non-namespace object

Vie niekto poradiť...?

Ľubo

PepYk_
Pokročilý
Pokročilý
Příspěvky: 112
Registrován: 03. květen 2021, 12:29
Dal poděkování: 2 poděkování
Dostal poděkování: 20 poděkování

Re: Syntax na priradenie premennej

Příspěvek od PepYk_ »

Proč na regulaci teploty nepoužiješ již hotovou integraci Climate?
https://www.home-assistant.io/integrations/climate/

lubost
Pokročilý
Pokročilý
Příspěvky: 112
Registrován: 03. duben 2021, 15:19
Dal poděkování: 2 poděkování
Dostal poděkování: 4 poděkování

Re: Syntax na priradenie premennej

Příspěvek od lubost »

Vypočítaná priemerná a požadovaná teplota sa odosiela práve do virtuálneho termostatu, ktorý následne ovláda kondenzačný plynový kotol... len aktuálne sa berie súčet všetkých požadovaných a všetkých nameraných teplôt z izieb... a ja chcem cez podmienky napočítať iba tie izby, ktoré ešte nie su vykúrené a kde nie je otvorené okno...
Ako píšem, ak použijem premenné "z brucha", novo vytvorené, všetko funguje, na záver dostanem presne tie hodnoty, ktoré očakávam... len potom neviem tieto hodnoty poslať do toho termostatu...
a predpokladám, že to súvisí s tým, že ta premenná má hodnotu iba pri behu daného skriptu... ak by som ju priradil do premennej definovanej v pomocníkovi, tak by to vyriešilo to, čo potrebujem...
V rámci automatizácie viem daný skript pustiť v podmienke, kde sa dá použiť šablóna. A následne v rámci Akcie a zavolanie služby priradiť do premennej z pomocníka hodnotu premennej, ktorá sa vypočítala v skripte (ale toto opat nefunguje, neviem zadat). A ďalšia akcia by odoslala túto hodnotu do tohto termostatu.

L

PS: Ved priradenie premennej z jednej do druhej su zaklady pri kazdom programovani, mozno je potrebna iba ina syntax, nie SET ale nieco ine... zatial iba tapam aj pre pouzitie STATES, zatial dokazem iba vyuzit na pouzitie hodnoty (senzora, premennej z pomocnika...). Pritom pouzitie a samotna syntax je rozsiahla...

kiklhorn
Moderátor
Moderátor
Příspěvky: 901
Registrován: 03. červenec 2021, 18:35
Dal poděkování: 107 poděkování
Dostal poděkování: 210 poděkování

Re: Syntax na priradenie premennej

Příspěvek od kiklhorn »

Hodím ti sem kus z configuration.yaml kde jsem něco řešil ohledně oboru platnosti proměnných (vyhledej si tam namespace)

Kód: Vybrat vše

sensor:
  - platform: systemmonitor
    resources:
      - type: disk_use_percent
        arg: /config
      - type: memory_free
  - platform: command_line
    name: UPSBatteryVoltage
    unit_of_measurement: "V"
    command: python3 /share/readvoltage.py
  - platform: command_line
    name: UPSBatteryCapacity
    unit_of_measurement: "%"
    command: python3 /share/readcapacity.py
  - platform: template
    sensors:
      batstatus_04:
        friendly_name: "Bat-04"
        value_template: >-
          {% if (states('sensor.battary_work_mode_04') | int == 1) and (states('sensor.soc_04') | int >= 95)-%}
            Nabito, odpočívá
          {%- elif (states('sensor.battary_work_mode_04') | int == 1) and (states('sensor.soc_04') | int <= 10)-%}
            Vybito, odpočívá
          {%- elif (states('sensor.battary_work_mode_04') | int == 1) and (states('sensor.soc_04') | int > 10) and (states('sensor.soc_04') | int < 95)-%}
            Odpočívá
          {%- elif (states('sensor.battary_work_mode_04') | int == 2) -%}
            Vybíjí se
          {%- elif (states('sensor.battary_work_mode_04') | int == 3) -%}
            Nabíjí se
          {%- else -%}
            Stav neznámý
          {%- endif %}
      batstatus_18:
        friendly_name: "Bat-18"
        value_template: >-
          {% set bat = states('sensor.battary_work_mode_18') | int %}
          {% set soc = states('sensor.soc_18') | int %}
          {% if bat == 1 and soc >= 95 %} Nabito, odpočívá
          {% elif bat ==1 and soc <= 10 %} Vybito, odpočívá
          {% elif bat == 1 and soc > 10 and soc < 95 %} Odpočívá
          {% elif bat == 2 %} Vybíjí se
          {% elif bat == 3 %} Nabíjí se
          {% else %} Stav neznámý
          {% endif %}
      batstatus_all:
        friendly_name: "Bat-all"
        value_template: >-
          {% if states('sensor.batstatus_04') == states('sensor.batstatus_18') %} {{states('sensor.batstatus_18')}}
          {% else %} různé
          {% endif %}
      p_pvstring1_04:
        friendly_name: "PVstring1-04"
        value_template: "{{ states('sensor.string1_voltage_04') | float * states('sensor.string1_current_04') | float }}"
        unit_of_measurement: "W"
        device_class: "power"
        icon_template: "mdi:solar-power"
      p_pvstring2_04:
        friendly_name: "PVstring2-04"
        value_template: "{{ states('sensor.string2_voltage_04') | float * states('sensor.string2_current_04') | float}}"
        unit_of_measurement: "W"
        device_class: "power"
        icon_template: "mdi:solar-power"
      p_pvstring1_18:
        friendly_name: "PVstring1-18"
        value_template: "{{ states('sensor.string1_voltage_18') | float * states('sensor.string1_current_18') | float}}"
        unit_of_measurement: "W"
        device_class: "power"
        icon_template: "mdi:solar-power"
      p_pvstring2_18:
        friendly_name: "PVstring2-18"
        value_template: "{{ states('sensor.string2_voltage_18') | float * states('sensor.string2_current_18') | float}}"
        unit_of_measurement: "W"
        device_class: "power"
        icon_template: "mdi:solar-power"
      p_pvtotal:
        friendly_name: "PV_power_total"
        value_template: "{{(states('sensor.p_pvstring1_04') | float) + (states('sensor.p_pvstring2_04') | float) + (states('sensor.p_pvstring1_18') | float) + (states('sensor.p_pvstring2_18') | float)}}"
        unit_of_measurement: "W"
        device_class: "power"
        icon_template: "mdi:solar-power"
      p_soc_avg:
        friendly_name: "SOC_avg"
        value_template: "{{((states('sensor.soc_04') | float + states('sensor.soc_18') | float)) / 2}}"
        unit_of_measurement: "%"
        device_class: "battery"
      p_output_sum:
        friendly_name: "Výstup celkem"
        value_template: "{{((states('sensor.outputpower_04') | float + states('sensor.outputpower_18') | float))}}"
        unit_of_measurement: "W"
        device_class: "power"
      p_battery_04:
        friendly_name: "Výkon baterie 04"
        unit_of_measurement: "W"
        device_class: "power"
        value_template: "{{((states('sensor.vbattery1_04') | float * states('sensor.ibattery1_04') | float))}}"
      p_battery_18:
        friendly_name: "Výkon baterie 18"
        unit_of_measurement: "W"
        device_class: "power"
        value_template: "{{((states('sensor.vbattery1_18') | float * states('sensor.ibattery1_18') | float))}}"
      p_battery_sum:
        friendly_name: "Výkon baterie celkem"
        unit_of_measurement: "W"
        device_class: "power"
        value_template: "{{((states('sensor.p_battery_04') | float + states('sensor.p_battery_18') | float))}}"
      p_pmeter_diff:
        friendly_name: "pmeter diff"
        unit_of_measurement: "W"
        device_class: "power"
        value_template: "{{((states('sensor.pmeter_04') | float - states('sensor.pmeter_18') | float)) | abs}}"
      p_pmeter_avg:
        friendly_name: "pmeter avg" #pmeter je spolecny, chci prumer poslednich dvou mereni
        unit_of_measurement: "W"
        device_class: "power"
        value_template: "{{((states('sensor.pmeter_04') | float + states('sensor.pmeter_18') | float)) /2 }}"
      p_mtactivepowerr_diff:
        friendly_name: "mtApR diff"
        unit_of_measurement: "W"
        device_class: "power"
        value_template: "{{((states('sensor.mtactivepowerr_04') | float - states('sensor.mtactivepowerr_18') | float)) | abs}}"
      p_mtactivepowers_diff:
        friendly_name: "mtApS diff"
        unit_of_measurement: "W"
        device_class: "power"
        value_template: "{{((states('sensor.mtactivepowers_04') | float - states('sensor.mtactivepowers_18') | float)) | abs}}"
      p_mtactivepowert_diff:
        friendly_name: "mtApT diff"
        unit_of_measurement: "W"
        device_class: "power"
        value_template: "{{((states('sensor.mtactivepowert_04') | float - states('sensor.mtactivepowert_18') | float)) | abs}}"
      p_mtactivepower_sum_04:
        friendly_name: "mtAp-04 sum"
        unit_of_measurement: "W"
        device_class: "power"
        value_template: "{{((states('sensor.mtactivepowerr_04') | float + states('sensor.mtactivepowers_04') | float + states('sensor.mtactivepowert_04') | float))}}"
      p_mtactivepower_sum_18:
        friendly_name: "mtAp-18 sum"
        unit_of_measurement: "W"
        device_class: "power"
        value_template: "{{((states('sensor.mtactivepowerr_18') | float + states('sensor.mtactivepowers_18') | float + states('sensor.mtactivepowert_18') | float))}}"
      p_mtactivepower_diff:
        friendly_name: "mtAp diff"
        unit_of_measurement: "W"
        device_class: "power"
        value_template: "{{((states('sensor.p_mtactivepower_sum_04') | float - states('sensor.p_mtactivepower_sum_18') | float)) | abs}}"
      p_backup_r_sum:
        friendly_name: "P backupR sum"
        unit_of_measurement: "W"
        device_class: "power"
        value_template: "{{((states('sensor.pbackup_04') | float + states('sensor.pbackup_18') | float))}}"
      p_backup_s_sum:
        friendly_name: "P backupS sum"
        unit_of_measurement: "W"
        device_class: "power"
        value_template: "{{((states('sensor.backuppload_s_04') | float + states('sensor.backuppload_s_18') | float))}}"
      p_backup_t_sum:
        friendly_name: "P backupT sum"
        unit_of_measurement: "W"
        device_class: "power"
        value_template: "{{((states('sensor.backuppload_t_04') | float + states('sensor.backuppload_t_18') | float))}}"
      p_backup_sum:
        friendly_name: "P backup sum"
        unit_of_measurement: "W"
        device_class: "power"
        value_template: "{{((states('sensor.p_backup_r_sum') | float + states('sensor.p_backup_s_sum') | float + states('sensor.p_backup_t_sum') | float))}}"
      p_backup_rst_04_sum:
        friendly_name: "BackRSTsum04"
        unit_of_measurement: "W"
        device_class: "power"
        value_template: "{{((states('sensor.pbackup_04') | float + states('sensor.backuppload_s_04') | float + states('sensor.backuppload_t_04') | float))}}"
      p_backup_rst_18_sum:
        friendly_name: "BackRSTsum18"
        unit_of_measurement: "W"
        device_class: "power"
        value_template: "{{((states('sensor.pbackup_18') | float + states('sensor.backuppload_s_18') | float + states('sensor.backuppload_t_18') | float))}}"
      p_rozdil_04:
        friendly_name: "rozdil04"
        unit_of_measurement: "W"
        device_class: "power"
        value_template: "{{((states('sensor.p_battery_04') | float - states('sensor.outputpower_04') | float ))}}"
      p_rozdil_18:
        friendly_name: "rozdil18"
        unit_of_measurement: "W"
        device_class: "power"
        value_template: "{{((states('sensor.p_battery_18') | float - states('sensor.outputpower_18') | float ))}}"
      p_rozdil_sum:
        friendly_name: "rozdilsum"
        unit_of_measurement: "W"
        device_class: "power"
        value_template: "{{((((states('sensor.p_battery_sum') | float) ) - ((states('sensor.p_output_sum') | float ) )) | float )}}"
      p_lasttime_04:
        value_template: "{{ (states('sensor.last_time_04') | float /1000) | timestamp_custom('%H:%M:%S')}}"
        # value_template: "{{ (states('sensor.last_time_04') | float /1000) | timestamp_custom('%d.%m.%y %-H:%M')}}"
        unit_of_measurement: ""
        friendly_name: "Platne v case-04"
      p_timebefore_04:
        value_template: "{{ (now().timestamp() - (states('sensor.last_time_04') | float /1000))/60 }}"
        unit_of_measurement: "minutami"
        friendly_name: "Platne pred-04"
      p_lasttime_18:
        # value_template: "{{ (states('sensor.last_time_18') | float /1000) | timestamp_custom('%d.%m.%y %-H:%M')}}"
        value_template: "{{ (states('sensor.last_time_18') | float /1000) | timestamp_custom('%H:%M:%S')}}"
        unit_of_measurement: ""
        friendly_name: "Platne v case-18"
      p_timebefore_18:
        value_template: "{{ (now().timestamp() - (states('sensor.last_time_18') | float /1000))/60 }}"
        unit_of_measurement: "minutami"
        friendly_name: "Platne pred-18"
      p_time_diff:
        value_template: "{{((states('sensor.p_timebefore_04') | float - states('sensor.p_timebefore_18') | float)) * 60 | abs}}"
        unit_of_measurement: "sec"
        friendly_name: "Rozdíl v času měření"
      p_time_avg:
        value_template: "{{(((states('sensor.last_time_04') | int /1000 ) + (states('sensor.last_time_18') | int /1000 )) /2) | timestamp_custom('%H:%M:%S')}}"
        # value_template: "{{(((states('sensor.last_time_04') | int /1000 ) + (states('sensor.last_time_18') | int /1000 )) /2) | timestamp_custom('%d.%m.%y %-H:%M')}}"
        unit_of_measurement: ""
        friendly_name: "Střední čas"
      dt_pre_hour_time_04:
        value_template: "{{ (states('sensor.pre_hour_time_04') | float /1000) | timestamp_custom('%d.%m.%y %-H:%M')}}"
        #value_template: "{{ (states('sensor.pre_hour_time_04') | float /1000) | timestamp_custom('%H:%M:%S')}}"
      dt_pre_hour_time_18:
        value_template: "{{ (states('sensor.pre_hour_time_18') | float /1000) | timestamp_custom('%d.%m.%y %-H:%M')}}"
        #value_template: "{{ (states('sensor.pre_hour_time_18') | float /1000) | timestamp_custom('%H:%M:%S')}}"
      p_sems_produced_today_sum:
        friendly_name: "Sems produced today"
        unit_of_measurement: "kWh"
        device_class: "power"
        value_template: "{{((states('sensor.sems_produced_today_04') | float + states('sensor.sems_produced_today_18') | float))}}"
      doba_vt_do:
        friendly_name: "Doba VT zbývající do: východ slunce + offset"
        value_template: >-
          {%-set vychod = as_datetime(strptime(state_attr("sun.sun", "next_rising"), "")) | as_local-%}
          {%- set nyni = now() -%} {#jeden cas vsude, at neni binec v mikrosekundach#}
          {%-set konec_rizeni = (vychod + timedelta( minutes=states('input_number.po_vychodu_slunce')|float*60)) | as_local-%}
          {%-if (nyni + timedelta(days=1, minutes=-5)) < konec_rizeni-%}
            {%-set konec_rizeni = konec_rizeni - timedelta(days = 1)-%}
          {%- endif%}
          {%- set ns = namespace() -%} {# musim pouzit namespace pokud promennou upravuji v cyklu a chci ji mit i po skonceni cyklu#}
          {%- set ns.doba_vt = nyni -%} {# inicializace - po pruchodu cykly chci mit zbyvajici doba VT do konec_mereni jako "timedelta"#}
          {%- set ns.doba_vt = ns.doba_vt - ns.doba_vt -%} {# Nulova datetime promenna, nevim jak jinak#}
          {%- set ns.prechod = False -%} {# Pokud budu parsovat dva dny nastavim na konci parsovani prvniho dne pokud zacal VT uz ten prvni den a neskoncil#}
          {%- set den =  as_datetime(nyni.strftime('%Y-%m-%d')) -%} {# bud proparsujeme jen dnesek nebo i o den vice#}
          {%- set ns.vypvt = nyni -%} {#cas posledniho Vypnuti VT VT VT !, #}
          {%- set ns.zapvt = nyni -%} {#cas posledniho Zapnuti VT#}
          {%-if nyni.weekday() != konec_rizeni.weekday()-%} {#mam parsovat i dnesek? ano, vychod slunce je az zitra?, parsuji dva dny#}
            {%-if nyni.weekday() < 5-%} {# pracovni nebo vikend ?#}
              {%-set vikend = 0-%}
            {%- else -%}
              {%-set vikend = 1-%}
            {%- endif -%}
            {%- set ns.vypvt = den.combine(den,strptime((state_attr('binary_sensor.nizky_tarif','response_json')['data'][vikend]['CAS_ZAP_1']) | string, '%H:%M').time()) -%}
            {%- if ns.vypvt > den-%} {# testuji jestli prvni zapnuti NT neni tedy o pulnoci, tzn. od pulnoci do tohoto CAS_ZAP_1(NT!) jiz bezi VT#}
              {%- if ns.vypvt >= nyni >= den -%} {#jsme zrovna v p prvnim useku VT ?? prvni vypnuti vt >= nyni >= pulnoc - jsme mezi prvnim vypnutim VT a pulnoci?#}
                  {%- set ns.doba_vt = ns.vypvt - nyni -%} {#prvni usek doby vt je od ted do xx #}
                  {{ ns.doba_vt }}
              {%- endif -%}
            {%- endif -%}
            {%-for i in range(1,10) -%}
              {%-if (state_attr('binary_sensor.nizky_tarif','response_json'))["data"][vikend]['CAS_VYP_' ~ i]-%} {# je v datech cez definovan dalsi casovy usek ?#}
                {%-set ns.zapvt = den.combine(den,strptime((state_attr('binary_sensor.nizky_tarif','response_json')['data'][vikend]['CAS_VYP_' ~ i  ]) | string, '%H:%M').time())-%}
                {%-if  ns.zapvt < den + timedelta( days=1, minutes = -1)-%} {#vyfiltruji pokud by pripadny konec byl ve 23:59#}
                  {%- set ns.prechod = true -%} {#- -#} 
                {%-endif-%}
              {%- endif -%}
              {%- if ((state_attr('binary_sensor.nizky_tarif','response_json'))["data"][vikend]['CAS_ZAP_' ~ (i | int +1) ]) -%}
                {%-set ns.vypvt = den.combine(den,strptime((state_attr('binary_sensor.nizky_tarif','response_json')['data'][vikend]['CAS_ZAP_' ~ (i | int +1) ]) | string, '%H:%M').time())-%}
                {%- set ns.prechod = false -%} {#- -#} 
              {%- endif-%}
              {%-if ns.zapvt and ns.zapvt<ns.vypvt-%} {#pokud neprochazime pres prazdna data nebo posledni ZAP_VT neni fiktivni CEZ 23:59#}
                {%-if ns.zapvt | as_local <= nyni <= ns.vypvt | as_local-%} {# jsme nyni v intervalu, posuneme zacatek na nyni#}
                  {%-set ns.zapvt = nyni-%}  
                {%-endif-%}
                {%-if ns.zapvt | as_local >= nyni and ns.vypvt | as_local <= konec_rizeni-%}
                  {%- set ns.doba_vt = ns.doba_vt + (ns.vypvt | as_local - ns.zapvt | as_local)-%}
                {%-endif-%}
              {%-endif-%}
            {%- endfor-%}
            {%-if ns.vypvt < den + timedelta( minutes = -1)-%}
            {%- endif-%}
            {%-set den = den + timedelta(days=1)-%} {# druhy nebo jediny den projdi vzdy#}
          {%-endif-%} 
          {%-if konec_rizeni.weekday() < 5-%}
              {%-set vikend = 0-%}
            {%- else -%}
              {%-set vikend = 1-%}
            {%- endif-%}
            {%-if ns.prechod-%}
                {%-set test = ns.zapvt-%}
            {%-else-%}
              {%-set test = den-%}
            {%- endif-%}
            {%- set ns.vypvt = den.combine(den,strptime((state_attr('binary_sensor.nizky_tarif','response_json')['data'][vikend]['CAS_ZAP_1']) | string, '%H:%M').time()) -%}
            {%- if ns.vypvt > test-%} 
              {%- if ns.vypvt|as_local >= nyni|as_local >= test | as_local -%} 
                  {%- set ns.doba_vt = ns.doba_vt + (ns.vypvt - nyni) -%} 
                  {{ doba_vt }}
              {%-elif nyni < ns.vypvt|as_local-%} 
                  {%-set ns.doba_vt = ns.doba_vt + ( ns.vypvt - test )-%}
              {%- endif -%}
            {%- endif -%}
            {%-for i in range(1,10) -%}
              {%-if (state_attr('binary_sensor.nizky_tarif','response_json'))["data"][vikend]['CAS_VYP_' ~ i]-%}
                {%-set ns.zapvt = den.combine(den,strptime((state_attr('binary_sensor.nizky_tarif','response_json')['data'][vikend]['CAS_VYP_' ~ i  ]) | string, '%H:%M').time())-%}
                {%-if  ns.zapvt < den + timedelta( days=1, minutes = -1)-%} 
                {%-endif-%}
              {%- endif -%}
              {%- if ((state_attr('binary_sensor.nizky_tarif','response_json'))["data"][vikend]['CAS_ZAP_' ~ (i | int +1) ]) -%}
                {%-set ns.vypvt = den.combine(den,strptime((state_attr('binary_sensor.nizky_tarif','response_json')['data'][vikend]['CAS_ZAP_' ~ (i | int +1) ]) | string, '%H:%M').time())-%}
              {%- endif-%}
              {%- if ns.zapvt and ns.zapvt<ns.vypvt -%} 
                {%- if ns.zapvt | as_local <= nyni <= ns.vypvt | as_local-%}
                  {%-set ns.zapvt = nyni-%}
                {%- endif-%}
                {%-if ns.zapvt | as_local <= konec_rizeni <= ns.vypvt | as_local-%}
                  {%-set ns.vypvt = konec_rizeni-%}
                {%-endif-%}
                {%- if ns.zapvt | as_local >= nyni and ns.vypvt | as_local <= konec_rizeni -%}
                  {%-set ns.doba_vt = ns.doba_vt + (ns.vypvt | as_local - ns.zapvt | as_local) -%}
                {%- endif -%}
              {%-endif-%}
            {%- endfor-%}
          {{ (ns.doba_vt.total_seconds() | int / 60) | int }}
        unit_of_measurement: "min"
        attribute_templates:
          konec_rizeni: >-
            {% set nyni=(now()) -%}
            {% set vychod = as_datetime(strptime(state_attr("sun.sun", "next_rising"), "")) | as_local %}
            {% set konec_rizeni = (vychod + timedelta( minutes=states('input_number.po_vychodu_slunce')|float*60)) | as_local %}
            {% if (nyni + timedelta(days=1, minutes=-5)) < konec_rizeni %}
              {% set konec_rizeni = konec_rizeni - timedelta(days = 1) %}
            {%- endif %}
            {{ konec_rizeni | as_local()}}
Vše co si přinesu domů je buď Shelly, nebo to skončí buď pod ESPhome nebo pod Zigbee2mqtt.
Ajťák co pamatuje BBS a OS/2 Warp a je mu jedno o jaký systém nebo síťařinu běží.
HA OS jako jedna z Proxmox VM na Odroid H3+/64GB https://github.com/tteck/Proxmox

lubost
Pokročilý
Pokročilý
Příspěvky: 112
Registrován: 03. duben 2021, 15:19
Dal poděkování: 2 poděkování
Dostal poděkování: 4 poděkování

Re: Syntax na priradenie premennej

Příspěvek od lubost »

Vdaka, minimálne som z toho kódu pochopil, ako sa by sa mal dať urobiť nový senzor už naplnený nejakou hodnotou.
Len zatiaľ neviem prísť na to, ako odovzdať do toho senzora, keď výsledkom toho skriptu sú dve premenné, napr.: priemerna_ziadana a priemerna_teplota... ked samotny senzor ma jeden nazov... som myslel, ze sa bude dat odkazat napr. cez index sensor.name(X), ale zatiaľ mi to nefunguje... mam vytvorit dve taketo premenne a v kazdej pouzit iba jeden vypocet? snad by mohlo zafunguovať niečo iné,a by som v rámci jedného skriptu dokázal naplniť cez index viacerými hodnotami...
senzor sa vytvoril, zadefinoval som ho do configuration.yaml takto:

Kód: Vybrat vše

  - platform: template
    sensors:
      teploty_hore:
        friendly_name: "vypocitane_teploty_hore"
        value_template: >-
        a nasleduje samotny skript, ktory vo vyvojarskom pohlade - Sablony funguje OK
Ked však chcem pozrieť na daný senzor v Registre entít, tak mám hlášku:
Táto entita ("sensor.teploty_hore") nemá jedinečné ID, preto jej nastavenia nie je možné spravovať z používateľského rozhrania. Viac podrobností nájdete na dokumentácia.

S tým "jedinečným ID sa stretávam aj pri iných entitách, ale minimálne ich viem použiť v lovelace, v automatizácii atď... tútú novo vytvorenú zatiaľ nikde (keďže nemá žiadne hodnoty).

Ľubo

Uživatelský avatar
Pete30
Moderátor
Moderátor
Příspěvky: 3337
Registrován: 30. září 2020, 20:33
Dal poděkování: 172 poděkování
Dostal poděkování: 364 poděkování

Re: Syntax na priradenie premennej

Příspěvek od Pete30 »

Táto entita ("sensor.teploty_hore") nemá jedinečné ID.
Tato hláška je vždy když vytvoříš nějaký senzor pomocí configuration.yaml a upravovat jdou pomocí přizpůsobení.
Pokud nejsem přítomen tak jsem na rybách ;)

lubost
Pokročilý
Pokročilý
Příspěvky: 112
Registrován: 03. duben 2021, 15:19
Dal poděkování: 2 poděkování
Dostal poděkování: 4 poděkování

Re: Syntax na priradenie premennej

Příspěvek od lubost »

Bolo by možné nejaký príklad, čo vlastne upraviť na akú hodnotu? Keď to kliknem, tak okrem iného mám tam aj takúto hlášku (doteraz pri iných sa mi neobjavovala):
It seems that your configuration.yaml doesn't properly include customize.yaml.
Changes made here are written in it, but will not be applied after a configuration reload unless the include is in place.

V rámci zmeny ak vyberiem nejaký parameter, ale nikde nevidím možnosť mu pridať nejakú hodnotu... teda ako by som to nastavil, po uložení sa nič neudeje... :-(
Obrázek

Uživatelský avatar
Lion®
Administrátor fóra
Administrátor fóra
Příspěvky: 1604
Registrován: 28. září 2020, 14:07
Bydliště: podkrkonoší
Dal poděkování: 144 poděkování
Dostal poděkování: 193 poděkování
Kontaktovat uživatele:

Re: Syntax na priradenie premennej

Příspěvek od Lion® »

Hodnotu parametru tady rozhodně měnit nemůžeš.

máš v configuration.yaml něco takového:

Kód: Vybrat vše

homeassistant:
  customize: !include customize.yaml
a v adresáři config soubor:

Kód: Vybrat vše

customize.yaml
zkus ten senzor nejdřív ještě doplnit:

Kód: Vybrat vše

  - platform: template
    sensors:
      teploty_hore:
        friendly_name: "vypocitane_teploty_hore"
        unit_of_measurement: '°C'
        value_template: >-
restart homeassistant

a tady je rovněž vše v pořádku???
Výstřižek.PNG

pokud chceš mít v jednom senzoru dvě proměnné tak musíš dát každou proměnnou jako zvláštní atribut nebo mít dva senzory

Kód: Vybrat vše

sensor:
  - platform: template
    sensors:
      teplota_hore_vypoctena:
        friendly_name: "vypoctena"
        unit_of_measurement: '°C'
        value_template: >-
      teplota_hore_prumer:
        friendly_name: "prumerna"
        unit_of_measurement: '°C'
        value_template: >-
nebo

Kód: Vybrat vše

sensor:
  - platform: template
    sensors:
      teplota_hore_vypoctena:
        friendly_name: "vypoctena"
        unit_of_measurement: '°C'
        value_template: "{{...
        attribute_templates:
          prumerna: "{{ ....
________________
🍻 Přispěj a získej přístup do obsahu fóra pro dárce. :thx:
Oficiální sada s Raspberry Pi 4B/4GB, černá +Argon NEO Raspberry Pi 4 Case
Patriot Burst 2.5" SATA SSD 120GB + AXAGON EE25-XA6 ALINE box

Galerie realizací

lubost
Pokročilý
Pokročilý
Příspěvky: 112
Registrován: 03. duben 2021, 15:19
Dal poděkování: 2 poděkování
Dostal poděkování: 4 poděkování

Re: Syntax na priradenie premennej

Příspěvek od lubost »

Zatial nepomohlo, ale problem bude v tom "odovzdani vypočítanej hodnoty" ako hodnotu senzora, keďže je tam viac výpočtov... budem ďalej študovať...
Ale kontrolná otázka... ak zmením niečo v configuration.yaml, overím, či je to OK... následne aktivácia iba cez kompletný reštart HA, alebo je aj iná možnosť...?

Ľubo

Uživatelský avatar
Lion®
Administrátor fóra
Administrátor fóra
Příspěvky: 1604
Registrován: 28. září 2020, 14:07
Bydliště: podkrkonoší
Dal poděkování: 144 poděkování
Dostal poděkování: 193 poděkování
Kontaktovat uživatele:

Re: Syntax na priradenie premennej

Příspěvek od Lion® »

lubost píše: 06. prosinec 2021, 12:01 Zatial nepomohlo, ale problem bude v tom "odovzdani vypočítanej hodnoty" ako hodnotu senzora, keďže je tam viac výpočtov... budem ďalej študovať...
Ale kontrolná otázka... ak zmením niečo v configuration.yaml, overím, či je to OK... následne aktivácia iba cez kompletný reštart HA, alebo je aj iná možnosť...?

Ľubo
Pomocí (například) doplňku - File editor. Je tam možnost Restart HASS, ale doporučuji přes ověření.
pošli tu šablonu výpočtu
________________
🍻 Přispěj a získej přístup do obsahu fóra pro dárce. :thx:
Oficiální sada s Raspberry Pi 4B/4GB, černá +Argon NEO Raspberry Pi 4 Case
Patriot Burst 2.5" SATA SSD 120GB + AXAGON EE25-XA6 ALINE box

Galerie realizací

Odpovědět

Zpět na „Šablony“