Daikin + Faikout + Machine Learning

heebo1974

Aktiivinen jäsen
Tässä nyt jotain käppyröitä, johon ei vielä päivitys ole vaikuttanut mitään.

Alakerta pe, la, su
1766935532882.png

48h taakseppäin
1766935578658.png


tänään
1766935675124.png


Yläkerta pe, la, su
1766935726536.png

48h taakseppäin
1766935770694.png

tänään
1766935798436.png



Pitäisi vähän yhtenäistää näitä käppyröitä, mutta en ole nyt jaksanut yhtään panostaa siihen.
 

Koelli

Aktiivinen jäsen
Tässä nyt jotain käppyröitä, johon ei vielä päivitys ole vaikuttanut mitään.

Alakerta pe, la, su
katso liitettä 111102
48h taakseppäin
katso liitettä 111103

tänään
katso liitettä 111104

Yläkerta pe, la, su
katso liitettä 111105
48h taakseppäin
katso liitettä 111106
tänään
katso liitettä 111107


Pitäisi vähän yhtenäistää näitä käppyröitä, mutta en ole nyt jaksanut yhtään panostaa siihen.
Kertaatko vielä, että mikä olikaan se graafi/tieto, jonka halusit saada esille?
 

heebo1974

Aktiivinen jäsen
Kertaatko vielä, että mikä olikaan se graafi/tieto, jonka halusit saada esille?
Niinjoo, eli tavallaan voisi olla kiva tietää että minkä "setpointin" ML milloinkin valitsee. Eli pörssisähkön hinta ajanhetkenä ja mikä on ns. virtuaalinen sen hetkinen setpoint. Näin voisi vähän tarkkailla miten tuo toimii pörssisähkön kanssa. Näillä lähipäivien hinnoilla tuskin on kauheasti eroja setpointeissakaan, mutta eiköhän sieltä taas kohta tule isojakin heittoja päivän sisällä.
 

Koelli

Aktiivinen jäsen
Niinjoo, eli tavallaan voisi olla kiva tietää että minkä "setpointin" ML milloinkin valitsee. Eli pörssisähkön hinta ajanhetkenä ja mikä on ns. virtuaalinen sen hetkinen setpoint. Näin voisi vähän tarkkailla miten tuo toimii pörssisähkön kanssa. Näillä lähipäivien hinnoilla tuskin on kauheasti eroja setpointeissakaan, mutta eiköhän sieltä taas kohta tule isojakin heittoja päivän sisällä.
Nythän se ei muuta setpointtia. Se voisi olla suoraviivaisempi ratkaisu loggauksen ja debuggaamisen osalta. Katson illalla asiaa.
 

Koelli

Aktiivinen jäsen
Niinjoo, eli tavallaan voisi olla kiva tietää että minkä "setpointin" ML milloinkin valitsee. Eli pörssisähkön hinta ajanhetkenä ja mikä on ns. virtuaalinen sen hetkinen setpoint. Näin voisi vähän tarkkailla miten tuo toimii pörssisähkön kanssa. Näillä lähipäivien hinnoilla tuskin on kauheasti eroja setpointeissakaan, mutta eiköhän sieltä taas kohta tule isojakin heittoja päivän sisällä.
Tällaista? Aika marginaalinen muutos graafissa (22c -> 21,79c), mutta nythän tuo alkaa varautumaan klo 22.00 tapahtuvaan melko suhteellisesti isoon hinnan muutokseen alaspäin. Kyseinen graafi on tehty plotly:llä HA:ssa ja vaatii toki pääkontrolleriin muutokset, jotka eivät ole vielä gitissä.

1766947832356.png
 
Viimeksi muokattu:

Koelli

Aktiivinen jäsen
Dev-haarasta löytyy uusin versio, jossa muutamia fixejä sekä tuo Nord Pool -ohjauslogiikka pääkontrolleriin, ja tuo plotly-malliesimerkki yaml-tiedostona.
 

heebo1974

Aktiivinen jäsen
Päivitetty ja itseasiassa melkein paras indikaattori ML:n valitsemalle setpointille on vain lisätä se entitylistaan esim näin:
1766990159929.png

Tuo tavoite nyt (input_number.daikin_setpoint) muuttuu aina kun ML vaihtaa setpointtia.
Screenshotin ottamisen hetkellä eroa ei ollut, mutta edellisellä vartilla oli 22.75. :)
 

Kaimo Ärräpää

Pumppauksen suomenmestari v. 2041
@heebo1974 , mitä lämpöanturia käytätte? Meinaan vaan, kun jos anturin tarkkuus on ±0,5 astetta, niin sehän on käytännössä jo asteen heitto. Varmaankin tässä ML- ja varsinkin pörssisähkökäytössä on hyötyä, mitä tarkempi on lämpötilan mittaus. Kuin jos verrataan pelkkään tavoitelämpötilakäyttöön.
 

Koelli

Aktiivinen jäsen
@heebo1974 , mitä lämpöanturia käytätte? Meinaan vaan, kun jos anturin tarkkuus on ±0,5 astetta, niin sehän on käytännössä jo asteen heitto. Varmaankin tässä ML- ja varsinkin pörssisähkökäytössä on hyötyä, mitä tarkempi on lämpötilan mittaus. Kuin jos verrataan pelkkään tavoitelämpötilakäyttöön.
Mulla on Airthings Wave+ anturina. Apollo Automationin Temp-1 tulossa postissa, niin saa tarkempaa (ehkä?) ja tiheämpää mittausta.

Toki Airthingsin resoluutio on 0,1c, joka riittää. Tarkkuudesta en tiedä, mutta se riittää, että se on suhteellisesti tarkka. Ei tarvitse olla absoluuttisesti.
 

heebo1974

Aktiivinen jäsen
@heebo1974 , mitä lämpöanturia käytätte? Meinaan vaan, kun jos anturin tarkkuus on ±0,5 astetta, niin sehän on käytännössä jo asteen heitto. Varmaankin tässä ML- ja varsinkin pörssisähkökäytössä on hyötyä, mitä tarkempi on lämpötilan mittaus. Kuin jos verrataan pelkkään tavoitelämpötilakäyttöön.
Minulla on noita kiinalaisia zigbee antureita muutamia eri malleja. Aion kuitenkin ostaa ruuvitagit näihin mittauksiin, sen takia että saan varmuutta. Nuo zigbee anturit jumiutuvat joskus ja ei auta kuin parittaa uudelleen. Normi käytössä ei mitään merkitystä, mutta säätökäytössä ei niinkään kiva ominaisuus.
 

heebo1974

Aktiivinen jäsen
MIetin muuten sellaistakin asiaa, että mittaisi esim. olohuoneesta kolmea eri pistettä. Tekisi template sensorin joka olisi noiden kaikkien kolmen keskiarvo ja tuota käyttäisi sitten ML säätölämpötilana. :)
 

Luukku

Vakionaama
MIetin muuten sellaistakin asiaa, että mittaisi esim. olohuoneesta kolmea eri pistettä. Tekisi template sensorin joka olisi noiden kaikkien kolmen keskiarvo ja tuota käyttäisi sitten ML säätölämpötilana. :)
Kahdesta pisteestä mäkin mittaan ja ulkolämmölle kolmesta (molemmat ilpit ja paikallisen observatorin arvot).
Ihan suositeltava ratkaisu.
 

Kaimo Ärräpää

Pumppauksen suomenmestari v. 2041
Mulla on Airthings Wave+ anturina. Apollo Automationin Temp-1 tulossa postissa, niin saa tarkempaa (ehkä?) ja tiheämpää mittausta.

Toki Airthingsin resoluutio on 0,1c, joka riittää. Tarkkuudesta en tiedä, mutta se riittää, että se on suhteellisesti tarkka. Ei tarvitse olla absoluuttisesti.

Tuota suhteellista tarkkuutta meinasin. Useimmiten kaikille sensoreille luvataan tuo ±0,5 astetta. Ruuville taisi olla ±0,2 astetta. Resoluutio taitaa tarkoittaa sitä mittarin pienintä raportoivaa eroa. Esim. 0,1 astetta, niin 22,04 = 22,0 ja 22,05 = 22,1. Mutta käytännössä tuo voisikin ±0,5 asteen tarkkuudella ollakin joko 21,5 tai 22,5 näytöllä.

Toki niinkin voi olla, että vaikka luvataan ±0,5 astetta, käytännössä kuitenkin on tarkempi.

EDIT: Eli noissa ilmoitetaankin käsitykseni mukaan absoluuttinen tarkkuus. Suhteellisesta tarkkuudesta ei löydy sitten juurikaan tietoa. Voihan olla, että lähes kaikki anturit ovat riittävän tarkkoja suhteellisesti?
 
Viimeksi muokattu:

Koelli

Aktiivinen jäsen
Tällainen uutena "ominaisuutena":

# - Use weather.koti attribute humidity:
# * Included in learning feature vector (without changing theta dimension)
# * Used to estimate defrost risk (higher humidity -> higher risk)
# * Icing cap becomes dynamic: temperature + humidity reduce cap when icing/defrost risk is high
# (Lower humidity => less defrost predicted => less restrictive cap.)
 

Koelli

Aktiivinen jäsen
Lisätty vielä tuulen vaikutus:

# - Add wind factor to ML learning using sensor.weather_forecast_hourly forecast:
# * wind_speed taken from first forecast item (fallback: None)
# * inject wind into existing 4D feature vector without changing theta dimension
# x[3] = (Tout_raw - Tin) + HUMIDITY_FEATURE_K*hum_norm + WIND_FEATURE_K*wind_cold_factor
# * wind_cold_factor increases with wind AND colder outdoor temperatures
 

heebo1974

Aktiivinen jäsen
Uusin versio dev-haarassa.
Toisen ilpin asetukset ovat tästä poistuneet. Toimiiko silti kahdella pumpulla, kunhan käyttää niitä vanhoja asetuksia ?
En tiedä mikä olisi järkevin tapa aina päivittää, mutta olen aina käynyt nuo alussa olevat asetukset "rivi riviltä" läpi ja muutellut.
Loppuhan on koko koodin kopiointi vain.
Päivittäminen hankaloitui, kun ei voi enää rivinumeroihin luottaa. Nyt en myöskään tiedä tuleeko nuo uudet ominaisuudet myös kakkospumpun asetuksiin, vai ovatko kenties globaaleja ?
 

Koelli

Aktiivinen jäsen
Toisen ilpin asetukset ovat tästä poistuneet. Toimiiko silti kahdella pumpulla, kunhan käyttää niitä vanhoja asetuksia ?
En tiedä mikä olisi järkevin tapa aina päivittää, mutta olen aina käynyt nuo alussa olevat asetukset "rivi riviltä" läpi ja muutellut.
Loppuhan on koko koodin kopiointi vain.
Päivittäminen hankaloitui, kun ei voi enää rivinumeroihin luottaa. Nyt en myöskään tiedä tuleeko nuo uudet ominaisuudet myös kakkospumpun asetuksiin, vai ovatko kenties globaaleja ?
Nyt ei ole kuin puhelin matkassa, niin en pääse tarkastamaan. Ei ollut tarkoitus tiputtaa mitään pois.

Kun katsoin HA:sta tuota koodia, niin kyllä siinä on avattu Daikinit monikossa, ja laitekohtaiset säätiedot.
 

heebo1974

Aktiivinen jäsen
Päivitin ja epäluuloisena aloin tutkia logeja ja törmäsin aika moneenkin herjaan:
Koodi:
Logger: homeassistant.helpers.template
Source: helpers/template/__init__.py:1750
First occurred: 12:20:42 (22 occurrences)
Last logged: 12:22:00

Template variable warning: 'dict object' has no attribute 'comfort' when rendering '{{value_json.comfort}}'
Template variable warning: 'dict object' has no attribute 'current_heating_setpoint' when rendering '{{ value_json.current_heating_setpoint }}'

Koodi:
Logger: homeassistant.components.automation.daikin_demand_control_p_saadin_22_5degc_select
Source: components/automation/__init__.py:799
integration: Automation (documentation, issues)
First occurred: 12:23:46 (2 occurrences)
Last logged: 12:23:52

Error while executing automation automation.daikin_demand_control_p_saadin_22_5degc_select: Option 61 is not valid for entity select.faikout_stylish_demand_control, valid options are: 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100

Koodi:
Logger: homeassistant.components.automation.daikin_demand_control_p_saadin_22_5degc_select
Source: helpers/script.py:2064
integration: Automation (documentation, issues)
First occurred: 12:23:46 (4 occurrences)
Last logged: 12:23:52

Daikin demand control - P-säädin 22.5°C (select): Choose at step 2: choice 1: Error executing script. Error for call_service at pos 1: Option 61 is not valid for entity select.faikout_stylish_demand_control, valid options are: 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100
Daikin demand control - P-säädin 22.5°C (select): Error executing script. Error for choose at pos 2: Option 61 is not valid for entity select.faikout_stylish_demand_control, valid options are: 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100

Koodi:
Logger: homeassistant.helpers.event
Source: helpers/event.py:360
First occurred: 12:23:46 (2 occurrences)
Last logged: 12:23:52

Error while dispatching event for sensor.faikout_stylish_outside to <Job track state_changed event {'input_number.daikin_setpoint', 'pyscript.daikin_ml_params', 'sensor.faikout_stylish_outside'} HassJobType.Callback <bound method TrackTemplateResultInfo._refresh of <TrackTemplateResultInfo {Template<template=({% set tb = state_attr('pyscript.daikin_ml_params', 'theta_by_ctx') %} {% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% set sp = states('input_number.daikin_setpoint') | float(22.5) %} {% if tb is not none and t_out is not none %} {# sama 0,1 °C bucketointi kuin daikin_ml.py:ssä #} {% set bucket = ((t_out * 10) | round(0) / 10) %} {% set ctx = '{:.1f}'.format(bucket) %} {% set th = tb.get(ctx) %} {% if th is not none and th | length >= 4 %} {% set t0 = th[0] | float %} {% set t2 = th[2] | float %} {% set t3 = th[3] | float %} {# Jos gain eli t2 on liian pieni, ei uskalleta laskea mitään järkevää #} {% if (t2 | abs) < 0.001 %} unknown {% else %} {# Tasapaino-olettama: Tin ≈ SP, Tout ≈ t_out #} {% set num = -(t0 + t3 * (t_out - sp)) %} {% set d = num / t2 * 100.0 %} {# Rajataan järkeviin rajoihin, esim. 30–100 % #} {% set d_clamped = [ [d, 100] | min, 30 ] | max %} {{ d_clamped | round(1) }} {% endif %} {% else %} unknown {% endif %} {% else %} unknown {% endif %}) renders=26>: <RenderInfo Template<template=({% set tb = state_attr('pyscript.daikin_ml_params', 'theta_by_ctx') %} {% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% set sp = states('input_number.daikin_setpoint') | float(22.5) %} {% if tb is not none and t_out is not none %} {# sama 0,1 °C bucketointi kuin daikin_ml.py:ssä #} {% set bucket = ((t_out * 10) | round(0) / 10) %} {% set ctx = '{:.1f}'.format(bucket) %} {% set th = tb.get(ctx) %} {% if th is not none and th | length >= 4 %} {% set t0 = th[0] | float %} {% set t2 = th[2] | float %} {% set t3 = th[3] | float %} {# Jos gain eli t2 on liian pieni, ei uskalleta laskea mitään järkevää #} {% if (t2 | abs) < 0.001 %} unknown {% else %} {# Tasapaino-olettama: Tin ≈ SP, Tout ≈ t_out #} {% set num = -(t0 + t3 * (t_out - sp)) %} {% set d = num / t2 * 100.0 %} {# Rajataan järkeviin rajoihin, esim. 30–100 % #} {% set d_clamped = [ [d, 100] | min, 30 ] | max %} {{ d_clamped | round(1) }} {% endif %} {% else %} unknown {% endif %} {% else %} unknown {% endif %}) renders=26> all_states=False all_states_lifecycle=False domains=frozenset() domains_lifecycle=frozenset() entities=frozenset({'sensor.faikout_stylish_outside', 'input_number.daikin_setpoint', 'pyscript.daikin_ml_params'}) rate_limit=None has_time=False exception=None is_static=False>, Template<template=({% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% if t_out is not none %} {% set bucket = ((t_out * 10) | round(0) / 10) %} {{ '{:.1f}'.format(bucket) }} {% else %} unknown {% endif %}) renders=26>: <RenderInfo Template<template=({% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% if t_out is not none %} {% set bucket = ((t_out * 10) | round(0) / 10) %} {{ '{:.1f}'.format(bucket) }} {% else %} unknown {% endif %}) renders=26> all_states=False all_states_lifecycle=False domains=frozenset() domains_lifecycle=frozenset() entities=frozenset({'sensor.faikout_stylish_outside'}) rate_limit=None has_time=False exception=None is_static=False>, Template<template=({% set tb = state_attr('pyscript.daikin_ml_params', 'theta_by_ctx') %} {% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% if tb is not none and t_out is not none %} {% set bucket = ((t_out * 10) | round(0) / 10) %} {% set ctx = '{:.1f}'.format(bucket) %} {% set th = tb.get(ctx) %} {{ th if th is not none else 'none' }} {% else %} none {% endif %}) renders=26>: <RenderInfo Template<template=({% set tb = state_attr('pyscript.daikin_ml_params', 'theta_by_ctx') %} {% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% if tb is not none and t_out is not none %} {% set bucket = ((t_out * 10) | round(0) / 10) %} {% set ctx = '{:.1f}'.format(bucket) %} {% set th = tb.get(ctx) %} {{ th if th is not none else 'none' }} {% else %} none {% endif %}) renders=26> all_states=False all_states_lifecycle=False domains=frozenset() domains_lifecycle=frozenset() entities=frozenset({'sensor.faikout_stylish_outside', 'pyscript.daikin_ml_params'}) rate_limit=None has_time=False exception=None is_static=False>}>>>
Error while dispatching event for sensor.faikout_stylish_outside to <Job track state_changed event {'input_number.daikin_setpoint', 'pyscript.daikin_ml_params', 'sensor.faikout_stylish_outside'} HassJobType.Callback <bound method TrackTemplateResultInfo._refresh of <TrackTemplateResultInfo {Template<template=({% set tb = state_attr('pyscript.daikin_ml_params', 'theta_by_ctx') %} {% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% set sp = states('input_number.daikin_setpoint') | float(22.5) %} {% if tb is not none and t_out is not none %} {# sama 0,1 °C bucketointi kuin daikin_ml.py:ssä #} {% set bucket = ((t_out * 10) | round(0) / 10) %} {% set ctx = '{:.1f}'.format(bucket) %} {% set th = tb.get(ctx) %} {% if th is not none and th | length >= 4 %} {% set t0 = th[0] | float %} {% set t2 = th[2] | float %} {% set t3 = th[3] | float %} {# Jos gain eli t2 on liian pieni, ei uskalleta laskea mitään järkevää #} {% if (t2 | abs) < 0.001 %} unknown {% else %} {# Tasapaino-olettama: Tin ≈ SP, Tout ≈ t_out #} {% set num = -(t0 + t3 * (t_out - sp)) %} {% set d = num / t2 * 100.0 %} {# Rajataan järkeviin rajoihin, esim. 30–100 % #} {% set d_clamped = [ [d, 100] | min, 30 ] | max %} {{ d_clamped | round(1) }} {% endif %} {% else %} unknown {% endif %} {% else %} unknown {% endif %}) renders=28>: <RenderInfo Template<template=({% set tb = state_attr('pyscript.daikin_ml_params', 'theta_by_ctx') %} {% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% set sp = states('input_number.daikin_setpoint') | float(22.5) %} {% if tb is not none and t_out is not none %} {# sama 0,1 °C bucketointi kuin daikin_ml.py:ssä #} {% set bucket = ((t_out * 10) | round(0) / 10) %} {% set ctx = '{:.1f}'.format(bucket) %} {% set th = tb.get(ctx) %} {% if th is not none and th | length >= 4 %} {% set t0 = th[0] | float %} {% set t2 = th[2] | float %} {% set t3 = th[3] | float %} {# Jos gain eli t2 on liian pieni, ei uskalleta laskea mitään järkevää #} {% if (t2 | abs) < 0.001 %} unknown {% else %} {# Tasapaino-olettama: Tin ≈ SP, Tout ≈ t_out #} {% set num = -(t0 + t3 * (t_out - sp)) %} {% set d = num / t2 * 100.0 %} {# Rajataan järkeviin rajoihin, esim. 30–100 % #} {% set d_clamped = [ [d, 100] | min, 30 ] | max %} {{ d_clamped | round(1) }} {% endif %} {% else %} unknown {% endif %} {% else %} unknown {% endif %}) renders=28> all_states=False all_states_lifecycle=False domains=frozenset() domains_lifecycle=frozenset() entities=frozenset({'sensor.faikout_stylish_outside', 'input_number.daikin_setpoint', 'pyscript.daikin_ml_params'}) rate_limit=None has_time=False exception=None is_static=False>, Template<template=({% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% if t_out is not none %} {% set bucket = ((t_out * 10) | round(0) / 10) %} {{ '{:.1f}'.format(bucket) }} {% else %} unknown {% endif %}) renders=28>: <RenderInfo Template<template=({% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% if t_out is not none %} {% set bucket = ((t_out * 10) | round(0) / 10) %} {{ '{:.1f}'.format(bucket) }} {% else %} unknown {% endif %}) renders=28> all_states=False all_states_lifecycle=False domains=frozenset() domains_lifecycle=frozenset() entities=frozenset({'sensor.faikout_stylish_outside'}) rate_limit=None has_time=False exception=None is_static=False>, Template<template=({% set tb = state_attr('pyscript.daikin_ml_params', 'theta_by_ctx') %} {% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% if tb is not none and t_out is not none %} {% set bucket = ((t_out * 10) | round(0) / 10) %} {% set ctx = '{:.1f}'.format(bucket) %} {% set th = tb.get(ctx) %} {{ th if th is not none else 'none' }} {% else %} none {% endif %}) renders=28>: <RenderInfo Template<template=({% set tb = state_attr('pyscript.daikin_ml_params', 'theta_by_ctx') %} {% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% if tb is not none and t_out is not none %} {% set bucket = ((t_out * 10) | round(0) / 10) %} {% set ctx = '{:.1f}'.format(bucket) %} {% set th = tb.get(ctx) %} {{ th if th is not none else 'none' }} {% else %} none {% endif %}) renders=28> all_states=False all_states_lifecycle=False domains=frozenset() domains_lifecycle=frozenset() entities=frozenset({'sensor.faikout_stylish_outside', 'pyscript.daikin_ml_params'}) rate_limit=None has_time=False exception=None is_static=False>}>>>
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/sensor/__init__.py", line 684, in state
    numerical_value = int(value)
ValueError: invalid literal for int() with base 10: 'unknown'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/sensor/__init__.py", line 687, in state
    numerical_value = float(value)
ValueError: could not convert string to float: 'unknown'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/event.py", line 360, in _async_dispatch_entity_id_event
    hass.async_run_hass_job(job, event)
    ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/core.py", line 918, in async_run_hass_job
    hassjob.target(*args)
    ~~~~~~~~~~~~~~^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/event.py", line 1319, in _refresh
    self.hass.async_run_hass_job(self._job, event, updates)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/core.py", line 918, in async_run_hass_job
    hassjob.target(*args)
    ~~~~~~~~~~~~~~^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/template/template_entity.py", line 357, in _handle_results
    self.async_write_ha_state()
    ~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1024, in async_write_ha_state
    self._async_write_ha_state()
    ~~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1149, in _async_write_ha_state
    self.__async_calculate_state()
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1086, in __async_calculate_state
    state = self._stringify_state(available)
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1030, in _stringify_state
    if (state := self.state) is None:
                 ^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/sensor/__init__.py", line 691, in state
    raise ValueError(
    ...<5 lines>...
    ) from err
ValueError: Sensor sensor.daikin_ml_learned_demand has device class 'None', state class 'None' unit '%' and suggested precision 'None' thus indicating it has a numeric value; however, it has the non-numeric value: 'unknown' (<class 'str'>)

En ole aikoihin logeja katsellut, joten en osaa sanoa onko nämä tulleet aiemin.
Toisaalta vaikuttaisi silti, että homma toimii niinkuin ennenkin.
 

Koelli

Aktiivinen jäsen
Päivitin ja epäluuloisena aloin tutkia logeja ja törmäsin aika moneenkin herjaan:
Koodi:
Logger: homeassistant.helpers.template
Source: helpers/template/__init__.py:1750
First occurred: 12:20:42 (22 occurrences)
Last logged: 12:22:00

Template variable warning: 'dict object' has no attribute 'comfort' when rendering '{{value_json.comfort}}'
Template variable warning: 'dict object' has no attribute 'current_heating_setpoint' when rendering '{{ value_json.current_heating_setpoint }}'

Koodi:
Logger: homeassistant.components.automation.daikin_demand_control_p_saadin_22_5degc_select
Source: components/automation/__init__.py:799
integration: Automation (documentation, issues)
First occurred: 12:23:46 (2 occurrences)
Last logged: 12:23:52

Error while executing automation automation.daikin_demand_control_p_saadin_22_5degc_select: Option 61 is not valid for entity select.faikout_stylish_demand_control, valid options are: 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100

Koodi:
Logger: homeassistant.components.automation.daikin_demand_control_p_saadin_22_5degc_select
Source: helpers/script.py:2064
integration: Automation (documentation, issues)
First occurred: 12:23:46 (4 occurrences)
Last logged: 12:23:52

Daikin demand control - P-säädin 22.5°C (select): Choose at step 2: choice 1: Error executing script. Error for call_service at pos 1: Option 61 is not valid for entity select.faikout_stylish_demand_control, valid options are: 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100
Daikin demand control - P-säädin 22.5°C (select): Error executing script. Error for choose at pos 2: Option 61 is not valid for entity select.faikout_stylish_demand_control, valid options are: 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100

Koodi:
Logger: homeassistant.helpers.event
Source: helpers/event.py:360
First occurred: 12:23:46 (2 occurrences)
Last logged: 12:23:52

Error while dispatching event for sensor.faikout_stylish_outside to <Job track state_changed event {'input_number.daikin_setpoint', 'pyscript.daikin_ml_params', 'sensor.faikout_stylish_outside'} HassJobType.Callback <bound method TrackTemplateResultInfo._refresh of <TrackTemplateResultInfo {Template<template=({% set tb = state_attr('pyscript.daikin_ml_params', 'theta_by_ctx') %} {% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% set sp = states('input_number.daikin_setpoint') | float(22.5) %} {% if tb is not none and t_out is not none %} {# sama 0,1 °C bucketointi kuin daikin_ml.py:ssä #} {% set bucket = ((t_out * 10) | round(0) / 10) %} {% set ctx = '{:.1f}'.format(bucket) %} {% set th = tb.get(ctx) %} {% if th is not none and th | length >= 4 %} {% set t0 = th[0] | float %} {% set t2 = th[2] | float %} {% set t3 = th[3] | float %} {# Jos gain eli t2 on liian pieni, ei uskalleta laskea mitään järkevää #} {% if (t2 | abs) < 0.001 %} unknown {% else %} {# Tasapaino-olettama: Tin ≈ SP, Tout ≈ t_out #} {% set num = -(t0 + t3 * (t_out - sp)) %} {% set d = num / t2 * 100.0 %} {# Rajataan järkeviin rajoihin, esim. 30–100 % #} {% set d_clamped = [ [d, 100] | min, 30 ] | max %} {{ d_clamped | round(1) }} {% endif %} {% else %} unknown {% endif %} {% else %} unknown {% endif %}) renders=26>: <RenderInfo Template<template=({% set tb = state_attr('pyscript.daikin_ml_params', 'theta_by_ctx') %} {% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% set sp = states('input_number.daikin_setpoint') | float(22.5) %} {% if tb is not none and t_out is not none %} {# sama 0,1 °C bucketointi kuin daikin_ml.py:ssä #} {% set bucket = ((t_out * 10) | round(0) / 10) %} {% set ctx = '{:.1f}'.format(bucket) %} {% set th = tb.get(ctx) %} {% if th is not none and th | length >= 4 %} {% set t0 = th[0] | float %} {% set t2 = th[2] | float %} {% set t3 = th[3] | float %} {# Jos gain eli t2 on liian pieni, ei uskalleta laskea mitään järkevää #} {% if (t2 | abs) < 0.001 %} unknown {% else %} {# Tasapaino-olettama: Tin ≈ SP, Tout ≈ t_out #} {% set num = -(t0 + t3 * (t_out - sp)) %} {% set d = num / t2 * 100.0 %} {# Rajataan järkeviin rajoihin, esim. 30–100 % #} {% set d_clamped = [ [d, 100] | min, 30 ] | max %} {{ d_clamped | round(1) }} {% endif %} {% else %} unknown {% endif %} {% else %} unknown {% endif %}) renders=26> all_states=False all_states_lifecycle=False domains=frozenset() domains_lifecycle=frozenset() entities=frozenset({'sensor.faikout_stylish_outside', 'input_number.daikin_setpoint', 'pyscript.daikin_ml_params'}) rate_limit=None has_time=False exception=None is_static=False>, Template<template=({% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% if t_out is not none %} {% set bucket = ((t_out * 10) | round(0) / 10) %} {{ '{:.1f}'.format(bucket) }} {% else %} unknown {% endif %}) renders=26>: <RenderInfo Template<template=({% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% if t_out is not none %} {% set bucket = ((t_out * 10) | round(0) / 10) %} {{ '{:.1f}'.format(bucket) }} {% else %} unknown {% endif %}) renders=26> all_states=False all_states_lifecycle=False domains=frozenset() domains_lifecycle=frozenset() entities=frozenset({'sensor.faikout_stylish_outside'}) rate_limit=None has_time=False exception=None is_static=False>, Template<template=({% set tb = state_attr('pyscript.daikin_ml_params', 'theta_by_ctx') %} {% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% if tb is not none and t_out is not none %} {% set bucket = ((t_out * 10) | round(0) / 10) %} {% set ctx = '{:.1f}'.format(bucket) %} {% set th = tb.get(ctx) %} {{ th if th is not none else 'none' }} {% else %} none {% endif %}) renders=26>: <RenderInfo Template<template=({% set tb = state_attr('pyscript.daikin_ml_params', 'theta_by_ctx') %} {% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% if tb is not none and t_out is not none %} {% set bucket = ((t_out * 10) | round(0) / 10) %} {% set ctx = '{:.1f}'.format(bucket) %} {% set th = tb.get(ctx) %} {{ th if th is not none else 'none' }} {% else %} none {% endif %}) renders=26> all_states=False all_states_lifecycle=False domains=frozenset() domains_lifecycle=frozenset() entities=frozenset({'sensor.faikout_stylish_outside', 'pyscript.daikin_ml_params'}) rate_limit=None has_time=False exception=None is_static=False>}>>>
Error while dispatching event for sensor.faikout_stylish_outside to <Job track state_changed event {'input_number.daikin_setpoint', 'pyscript.daikin_ml_params', 'sensor.faikout_stylish_outside'} HassJobType.Callback <bound method TrackTemplateResultInfo._refresh of <TrackTemplateResultInfo {Template<template=({% set tb = state_attr('pyscript.daikin_ml_params', 'theta_by_ctx') %} {% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% set sp = states('input_number.daikin_setpoint') | float(22.5) %} {% if tb is not none and t_out is not none %} {# sama 0,1 °C bucketointi kuin daikin_ml.py:ssä #} {% set bucket = ((t_out * 10) | round(0) / 10) %} {% set ctx = '{:.1f}'.format(bucket) %} {% set th = tb.get(ctx) %} {% if th is not none and th | length >= 4 %} {% set t0 = th[0] | float %} {% set t2 = th[2] | float %} {% set t3 = th[3] | float %} {# Jos gain eli t2 on liian pieni, ei uskalleta laskea mitään järkevää #} {% if (t2 | abs) < 0.001 %} unknown {% else %} {# Tasapaino-olettama: Tin ≈ SP, Tout ≈ t_out #} {% set num = -(t0 + t3 * (t_out - sp)) %} {% set d = num / t2 * 100.0 %} {# Rajataan järkeviin rajoihin, esim. 30–100 % #} {% set d_clamped = [ [d, 100] | min, 30 ] | max %} {{ d_clamped | round(1) }} {% endif %} {% else %} unknown {% endif %} {% else %} unknown {% endif %}) renders=28>: <RenderInfo Template<template=({% set tb = state_attr('pyscript.daikin_ml_params', 'theta_by_ctx') %} {% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% set sp = states('input_number.daikin_setpoint') | float(22.5) %} {% if tb is not none and t_out is not none %} {# sama 0,1 °C bucketointi kuin daikin_ml.py:ssä #} {% set bucket = ((t_out * 10) | round(0) / 10) %} {% set ctx = '{:.1f}'.format(bucket) %} {% set th = tb.get(ctx) %} {% if th is not none and th | length >= 4 %} {% set t0 = th[0] | float %} {% set t2 = th[2] | float %} {% set t3 = th[3] | float %} {# Jos gain eli t2 on liian pieni, ei uskalleta laskea mitään järkevää #} {% if (t2 | abs) < 0.001 %} unknown {% else %} {# Tasapaino-olettama: Tin ≈ SP, Tout ≈ t_out #} {% set num = -(t0 + t3 * (t_out - sp)) %} {% set d = num / t2 * 100.0 %} {# Rajataan järkeviin rajoihin, esim. 30–100 % #} {% set d_clamped = [ [d, 100] | min, 30 ] | max %} {{ d_clamped | round(1) }} {% endif %} {% else %} unknown {% endif %} {% else %} unknown {% endif %}) renders=28> all_states=False all_states_lifecycle=False domains=frozenset() domains_lifecycle=frozenset() entities=frozenset({'sensor.faikout_stylish_outside', 'input_number.daikin_setpoint', 'pyscript.daikin_ml_params'}) rate_limit=None has_time=False exception=None is_static=False>, Template<template=({% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% if t_out is not none %} {% set bucket = ((t_out * 10) | round(0) / 10) %} {{ '{:.1f}'.format(bucket) }} {% else %} unknown {% endif %}) renders=28>: <RenderInfo Template<template=({% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% if t_out is not none %} {% set bucket = ((t_out * 10) | round(0) / 10) %} {{ '{:.1f}'.format(bucket) }} {% else %} unknown {% endif %}) renders=28> all_states=False all_states_lifecycle=False domains=frozenset() domains_lifecycle=frozenset() entities=frozenset({'sensor.faikout_stylish_outside'}) rate_limit=None has_time=False exception=None is_static=False>, Template<template=({% set tb = state_attr('pyscript.daikin_ml_params', 'theta_by_ctx') %} {% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% if tb is not none and t_out is not none %} {% set bucket = ((t_out * 10) | round(0) / 10) %} {% set ctx = '{:.1f}'.format(bucket) %} {% set th = tb.get(ctx) %} {{ th if th is not none else 'none' }} {% else %} none {% endif %}) renders=28>: <RenderInfo Template<template=({% set tb = state_attr('pyscript.daikin_ml_params', 'theta_by_ctx') %} {% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% if tb is not none and t_out is not none %} {% set bucket = ((t_out * 10) | round(0) / 10) %} {% set ctx = '{:.1f}'.format(bucket) %} {% set th = tb.get(ctx) %} {{ th if th is not none else 'none' }} {% else %} none {% endif %}) renders=28> all_states=False all_states_lifecycle=False domains=frozenset() domains_lifecycle=frozenset() entities=frozenset({'sensor.faikout_stylish_outside', 'pyscript.daikin_ml_params'}) rate_limit=None has_time=False exception=None is_static=False>}>>>
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/sensor/__init__.py", line 684, in state
    numerical_value = int(value)
ValueError: invalid literal for int() with base 10: 'unknown'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/sensor/__init__.py", line 687, in state
    numerical_value = float(value)
ValueError: could not convert string to float: 'unknown'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/event.py", line 360, in _async_dispatch_entity_id_event
    hass.async_run_hass_job(job, event)
    ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/core.py", line 918, in async_run_hass_job
    hassjob.target(*args)
    ~~~~~~~~~~~~~~^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/event.py", line 1319, in _refresh
    self.hass.async_run_hass_job(self._job, event, updates)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/core.py", line 918, in async_run_hass_job
    hassjob.target(*args)
    ~~~~~~~~~~~~~~^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/template/template_entity.py", line 357, in _handle_results
    self.async_write_ha_state()
    ~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1024, in async_write_ha_state
    self._async_write_ha_state()
    ~~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1149, in _async_write_ha_state
    self.__async_calculate_state()
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1086, in __async_calculate_state
    state = self._stringify_state(available)
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1030, in _stringify_state
    if (state := self.state) is None:
                 ^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/sensor/__init__.py", line 691, in state
    raise ValueError(
    ...<5 lines>...
    ) from err
ValueError: Sensor sensor.daikin_ml_learned_demand has device class 'None', state class 'None' unit '%' and suggested precision 'None' thus indicating it has a numeric value; however, it has the non-numeric value: 'unknown' (<class 'str'>)

En ole aikoihin logeja katsellut, joten en osaa sanoa onko nämä tulleet aiemin.
Toisaalta vaikuttaisi silti, että homma toimii niinkuin ennenkin.
Varmistan myöhemmin, että menikö nyt kuitenkin jotain vihkoon.
 

heebo1974

Aktiivinen jäsen
Hmm.. Itsellälni ei jostain syystä ole tuota sensor.weather_forecast_hourly entityä ollenkaan ?
Käytössä on se perus HA:n weather home integraatio. Itselläni on HA englanninkielisenä, joten se on weather.home eikä weather.koti.
Kuvittelin, että se silti pitäisi ko. forecast hourly attribuutin sisällään, mutta en löydä sellaista.

1767005111073.png


Toisaalta silti tämän saa auki:
1767005216398.png
 

Koelli

Aktiivinen jäsen
Hmm.. Itsellälni ei jostain syystä ole tuota sensor.weather_forecast_hourly entityä ollenkaan ?
Käytössä on se perus HA:n weather home integraatio. Itselläni on HA englanninkielisenä, joten se on weather.home eikä weather.koti.
Kuvittelin, että se silti pitäisi ko. forecast hourly attribuutin sisällään, mutta en löydä sellaista.

katso liitettä 111138

Toisaalta silti tämän saa auki:
katso liitettä 111139
Niin monta sääennustuksiin liittyvää integraatiota, ettei muista enää itsekään, että mikä tarjosi mitäkin.

Veikkaan tuon oleva met.no.

 

heebo1974

Aktiivinen jäsen
Niin monta sääennustuksiin liittyvää integraatiota, ettei muista enää itsekään, että mikä tarjosi mitäkin.

Veikkaan tuon oleva met.no.

Sama on käytössä..
Veikkaan, että minun pitää jotenkin istuttaa tuo home sana tuohon sensoriin.
Tai siis en ole varma toimiiko tuo sensor.weather_forecast_hourly, mutta manuaalisesti en sellaista löydä.

Developer toolssilla sain tällaista irti:
1767006233010.png
 

Koelli

Aktiivinen jäsen
Sama on käytössä..
Veikkaan, että minun pitää jotenkin istuttaa tuo home sana tuohon sensoriin.
Tai siis en ole varma toimiiko tuo sensor.weather_forecast_hourly, mutta manuaalisesti en sellaista löydä.

Developer toolssilla sain tällaista irti:
katso liitettä 111140
Näyttää tutulta. Tässä loitsu configuration.yaml:Iin

Koodi:
template:
  - trigger:
      - platform: time_pattern
        hours: /1
      - platform: homeassistant
        event: start
    action:
      - service: weather.get_forecasts
        data:
          type: hourly
        target:
          entity_id: weather.home
        response_variable: hourly
    sensor:
      - name: Weather Hourly
        state: "{{ states('weather.home') }}"
        attributes:
          temperature: "{{ state_attr('weather.home', 'temperature') }}"
          dew_point: "{{ state_attr('weather.home', 'dew_point') }}"
          temperature_unit: "{{ state_attr('weather.home', 'temperature_unit') }}"
          humidity: "{{ state_attr('weather.home', 'humidity') }}"
          cloud_coverage: "{{ state_attr('weather.home', 'cloud_coverage') }}"
          pressure: "{{ state_attr('weather.home', 'pressure') }}"
          pressure_unit: "{{ state_attr('weather.home', 'pressure_unit') }}"
          wind_bearing: "{{ state_attr('weather.home', 'wind_bearing') }}"
          wind_speed: "{{ state_attr('weather.home', 'wind_speed') }}"
          wind_speed_unit: "{{ state_attr('weather.home', 'wind_speed_unit') }}"
          visibility_unit: "{{ state_attr('weather.home', 'visibility_unit') }}"
          precipitation_unit: "{{ state_attr('weather.home', 'precipitation_unit') }}"
          forecast: "{{ hourly['weather.home'].forecast }}"
 

Koelli

Aktiivinen jäsen
Huomisesta lähtien nähdäänkin sitten tämän toimintaa, tai toimimattomuutta, kun hinta- ja lämpötilavaihtelut tulevat olemaan merkittäviä.
 

heebo1974

Aktiivinen jäsen
Näyttää tutulta. Tässä loitsu configuration.yaml:Iin

Koodi:
template:
  - trigger:
      - platform: time_pattern
        hours: /1
      - platform: homeassistant
        event: start
    action:
      - service: weather.get_forecasts
        data:
          type: hourly
        target:
          entity_id: weather.home
        response_variable: hourly
    sensor:
      - name: Weather Hourly
        state: "{{ states('weather.home') }}"
        attributes:
          temperature: "{{ state_attr('weather.home', 'temperature') }}"
          dew_point: "{{ state_attr('weather.home', 'dew_point') }}"
          temperature_unit: "{{ state_attr('weather.home', 'temperature_unit') }}"
          humidity: "{{ state_attr('weather.home', 'humidity') }}"
          cloud_coverage: "{{ state_attr('weather.home', 'cloud_coverage') }}"
          pressure: "{{ state_attr('weather.home', 'pressure') }}"
          pressure_unit: "{{ state_attr('weather.home', 'pressure_unit') }}"
          wind_bearing: "{{ state_attr('weather.home', 'wind_bearing') }}"
          wind_speed: "{{ state_attr('weather.home', 'wind_speed') }}"
          wind_speed_unit: "{{ state_attr('weather.home', 'wind_speed_unit') }}"
          visibility_unit: "{{ state_attr('weather.home', 'visibility_unit') }}"
          precipitation_unit: "{{ state_attr('weather.home', 'precipitation_unit') }}"
          forecast: "{{ hourly['weather.home'].forecast }}"
Ääh, ei toimi. Ei vaan hae mitään ja logiinkin tuli:

Koodi:
Logger: homeassistant.helpers.service
Source: helpers/target.py:131
First occurred: 13:25:30 (1 occurrence)
Last logged: 13:25:30

Referenced entities weather.home are missing or not currently available

Hitto kun ei tajua miten noi "state_attr" koodit toimivat. Pitäisikö minulla kuitenkin olla weather.home:n tilalle tuo weather.forecast_home ?
No ei maksa mitään kokeilla.

EDIT: NONIIN NYT TOIMII AINAKIN TÄMÄ WEATHER HOMMELI !!
 
Viimeksi muokattu:

heebo1974

Aktiivinen jäsen
Hitto kun ei tajua miten noi "state_attr" koodit toimivat. Pitäisikö minulla kuitenkin olla weather.home:n tilalle tuo weather.forecast_home ?
No ei maksa mitään kokeilla.

EDIT: NONIIN NYT TOIMII AINAKIN TÄMÄ WEATHER HOMMELI !!
Eli tälllä taikarimpsulla sain toimimaan ja nimesin vielä sen nyt samoin kuin tässä ML koodissa on oletuksena.

Koodi:
  - trigger:
      - platform: time_pattern
        hours: /1
      - platform: homeassistant
        event: start
    action:
      - service: weather.get_forecasts
        data:
          type: hourly
        target:
          entity_id: weather.forecast_home
        response_variable: hourly
    sensor:
      - name: Weather forecast hourly
        unique_id: sensor.weather_forecast_hourly
        state: "{{ states('weather.forecast_home') }}"
        attributes:
          temperature: "{{ state_attr('weather.forecast_home', 'temperature') }}"
          dew_point: "{{ state_attr('weather.forecast_home', 'dew_point') }}"
          temperature_unit: "{{ state_attr('weather.forecast_home', 'temperature_unit') }}"
          humidity: "{{ state_attr('weather.forecast_home', 'humidity') }}"
          cloud_coverage: "{{ state_attr('weather.forecast_home', 'cloud_coverage') }}"
          pressure: "{{ state_attr('weather.forecast_home', 'pressure') }}"
          pressure_unit: "{{ state_attr('weather.forecast_home', 'pressure_unit') }}"
          wind_bearing: "{{ state_attr('weather.forecast_home', 'wind_bearing') }}"
          wind_speed: "{{ state_attr('weather.forecast_home', 'wind_speed') }}"
          wind_speed_unit: "{{ state_attr('weather.forecast_home', 'wind_speed_unit') }}"
          visibility_unit: "{{ state_attr('weather.forecast_home', 'visibility_unit') }}"
          precipitation_unit: "{{ state_attr('weather.forecast_home', 'precipitation_unit') }}"
          forecast: "{{ hourly['weather.forecast_home'].forecast }}"
 

heebo1974

Aktiivinen jäsen
Onko jotain yleispätevää ohjenuoraa milloin kannattaa resetoida noi oppimiset ? Siis joo periaatteessa varmaan ei milloinkaan, mutta mites nyt kun päivitystä pukkaa todella usein. Vaikuttaako eri versioilla opetus johonkin, varsinkin jos ollaan vikatilassa opetettu (esim. weather integraatio ei ole toiminut :) ).
 

heebo1974

Aktiivinen jäsen
Jotain on vialla kyllä nyt. Olohuoneessa lämmöt laskee, mutta dc ei nouse.
Pyörii vain 50 - 60 väliä. Kokeilin pakottaa 95:een, niin ei kauaakaan kun se putosi taas 60:iin.
Ollaan jo -0.7 astetta setpointista. Ehkä pitää resetoida noi opinnot. No noi errorit logissakin voi jotain kertoa, mutta jotain se kuitenkin tekee vaikka niitä on.. :)

EDIT: Ajoin resetin.
 

Koelli

Aktiivinen jäsen
Jotain on vialla kyllä nyt. Olohuoneessa lämmöt laskee, mutta dc ei nouse.
Pyörii vain 50 - 60 väliä. Kokeilin pakottaa 95:een, niin ei kauaakaan kun se putosi taas 60:iin.
Ollaan jo -0.7 astetta setpointista. Ehkä pitää resetoida noi opinnot. No noi errorit logissakin voi jotain kertoa, mutta jotain se kuitenkin tekee vaikka niitä on.. :)

EDIT: Ajoin resetin.
Mikä sun Icing Cap on?
 

heebo1974

Aktiivinen jäsen
Laitoin tämän nyt hetkeksi tauolle, että saan lämpöä tupaan. :)
Ei auttanut vaikka nostin setpointtia 30 asteeseen. Silti vain dc vaihteli 55-60 välillä.

Jatketaan myöhemmin, jos löydät vaikka noista logi virheistä jotain syyllistä..
 

heebo1974

Aktiivinen jäsen
Icing Cap rajoittaa. Se oli aiemmin bugi, ettei rajoittanut. Nosta Icing Cap vaikka 95%.
Jepulis, tämähän auttoi. Rupes noita logeja tutkailemaan uudemman kerran, nyt kun sain sen weather entitynkin kuntoon, niin edelleen tulee näitä virheitä logiin. En osaa sanoa vaikuttaako toimintaan vai ei.

Koodi:
Logger: homeassistant.helpers.event
Source: helpers/event.py:360
First occurred: 17:24:10 (26 occurrences)
Last logged: 17:38:52

Error while dispatching event for sensor.faikout_stylish_outside to <Job track state_changed event {'input_number.daikin_setpoint', 'sensor.faikout_stylish_outside', 'pyscript.daikin_ml_params'} HassJobType.Callback <bound method TrackTemplateResultInfo._refresh of <TrackTemplateResultInfo {Template<template=({% set tb = state_attr('pyscript.daikin_ml_params', 'theta_by_ctx') %} {% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% set sp = states('input_number.daikin_setpoint') | float(22.5) %} {% if tb is not none and t_out is not none %} {# sama 0,1 °C bucketointi kuin daikin_ml.py:ssä #} {% set bucket = ((t_out * 10) | round(0) / 10) %} {% set ctx = '{:.1f}'.format(bucket) %} {% set th = tb.get(ctx) %} {% if th is not none and th | length >= 4 %} {% set t0 = th[0] | float %} {% set t2 = th[2] | float %} {% set t3 = th[3] | float %} {# Jos gain eli t2 on liian pieni, ei uskalleta laskea mitään järkevää #} {% if (t2 | abs) < 0.001 %} unknown {% else %} {# Tasapaino-olettama: Tin ≈ SP, Tout ≈ t_out #} {% set num = -(t0 + t3 * (t_out - sp)) %} {% set d = num / t2 * 100.0 %} {# Rajataan järkeviin rajoihin, esim. 30–100 % #} {% set d_clamped = [ [d, 100] | min, 30 ] | max %} {{ d_clamped | round(1) }} {% endif %} {% else %} unknown {% endif %} {% else %} unknown {% endif %}) renders=410>: <RenderInfo Template<template=({% set tb = state_attr('pyscript.daikin_ml_params', 'theta_by_ctx') %} {% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% set sp = states('input_number.daikin_setpoint') | float(22.5) %} {% if tb is not none and t_out is not none %} {# sama 0,1 °C bucketointi kuin daikin_ml.py:ssä #} {% set bucket = ((t_out * 10) | round(0) / 10) %} {% set ctx = '{:.1f}'.format(bucket) %} {% set th = tb.get(ctx) %} {% if th is not none and th | length >= 4 %} {% set t0 = th[0] | float %} {% set t2 = th[2] | float %} {% set t3 = th[3] | float %} {# Jos gain eli t2 on liian pieni, ei uskalleta laskea mitään järkevää #} {% if (t2 | abs) < 0.001 %} unknown {% else %} {# Tasapaino-olettama: Tin ≈ SP, Tout ≈ t_out #} {% set num = -(t0 + t3 * (t_out - sp)) %} {% set d = num / t2 * 100.0 %} {# Rajataan järkeviin rajoihin, esim. 30–100 % #} {% set d_clamped = [ [d, 100] | min, 30 ] | max %} {{ d_clamped | round(1) }} {% endif %} {% else %} unknown {% endif %} {% else %} unknown {% endif %}) renders=410> all_states=False all_states_lifecycle=False domains=frozenset() domains_lifecycle=frozenset() entities=frozenset({'sensor.faikout_stylish_outside', 'pyscript.daikin_ml_params', 'input_number.daikin_setpoint'}) rate_limit=None has_time=False exception=None is_static=False>, Template<template=({% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% if t_out is not none %} {% set bucket = ((t_out * 10) | round(0) / 10) %} {{ '{:.1f}'.format(bucket) }} {% else %} unknown {% endif %}) renders=392>: <RenderInfo Template<template=({% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% if t_out is not none %} {% set bucket = ((t_out * 10) | round(0) / 10) %} {{ '{:.1f}'.format(bucket) }} {% else %} unknown {% endif %}) renders=392> all_states=False all_states_lifecycle=False domains=frozenset() domains_lifecycle=frozenset() entities=frozenset({'sensor.faikout_stylish_outside'}) rate_limit=None has_time=False exception=None is_static=False>, Template<template=({% set tb = state_attr('pyscript.daikin_ml_params', 'theta_by_ctx') %} {% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% if tb is not none and t_out is not none %} {% set bucket = ((t_out * 10) | round(0) / 10) %} {% set ctx = '{:.1f}'.format(bucket) %} {% set th = tb.get(ctx) %} {{ th if th is not none else 'none' }} {% else %} none {% endif %}) renders=392>: <RenderInfo Template<template=({% set tb = state_attr('pyscript.daikin_ml_params', 'theta_by_ctx') %} {% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% if tb is not none and t_out is not none %} {% set bucket = ((t_out * 10) | round(0) / 10) %} {% set ctx = '{:.1f}'.format(bucket) %} {% set th = tb.get(ctx) %} {{ th if th is not none else 'none' }} {% else %} none {% endif %}) renders=392> all_states=False all_states_lifecycle=False domains=frozenset() domains_lifecycle=frozenset() entities=frozenset({'sensor.faikout_stylish_outside', 'pyscript.daikin_ml_params'}) rate_limit=None has_time=False exception=None is_static=False>}>>>
Error while dispatching event for sensor.faikout_stylish_outside to <Job track state_changed event {'input_number.daikin_setpoint', 'sensor.faikout_stylish_outside', 'pyscript.daikin_ml_params'} HassJobType.Callback <bound method TrackTemplateResultInfo._refresh of <TrackTemplateResultInfo {Template<template=({% set tb = state_attr('pyscript.daikin_ml_params', 'theta_by_ctx') %} {% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% set sp = states('input_number.daikin_setpoint') | float(22.5) %} {% if tb is not none and t_out is not none %} {# sama 0,1 °C bucketointi kuin daikin_ml.py:ssä #} {% set bucket = ((t_out * 10) | round(0) / 10) %} {% set ctx = '{:.1f}'.format(bucket) %} {% set th = tb.get(ctx) %} {% if th is not none and th | length >= 4 %} {% set t0 = th[0] | float %} {% set t2 = th[2] | float %} {% set t3 = th[3] | float %} {# Jos gain eli t2 on liian pieni, ei uskalleta laskea mitään järkevää #} {% if (t2 | abs) < 0.001 %} unknown {% else %} {# Tasapaino-olettama: Tin ≈ SP, Tout ≈ t_out #} {% set num = -(t0 + t3 * (t_out - sp)) %} {% set d = num / t2 * 100.0 %} {# Rajataan järkeviin rajoihin, esim. 30–100 % #} {% set d_clamped = [ [d, 100] | min, 30 ] | max %} {{ d_clamped | round(1) }} {% endif %} {% else %} unknown {% endif %} {% else %} unknown {% endif %}) renders=412>: <RenderInfo Template<template=({% set tb = state_attr('pyscript.daikin_ml_params', 'theta_by_ctx') %} {% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% set sp = states('input_number.daikin_setpoint') | float(22.5) %} {% if tb is not none and t_out is not none %} {# sama 0,1 °C bucketointi kuin daikin_ml.py:ssä #} {% set bucket = ((t_out * 10) | round(0) / 10) %} {% set ctx = '{:.1f}'.format(bucket) %} {% set th = tb.get(ctx) %} {% if th is not none and th | length >= 4 %} {% set t0 = th[0] | float %} {% set t2 = th[2] | float %} {% set t3 = th[3] | float %} {# Jos gain eli t2 on liian pieni, ei uskalleta laskea mitään järkevää #} {% if (t2 | abs) < 0.001 %} unknown {% else %} {# Tasapaino-olettama: Tin ≈ SP, Tout ≈ t_out #} {% set num = -(t0 + t3 * (t_out - sp)) %} {% set d = num / t2 * 100.0 %} {# Rajataan järkeviin rajoihin, esim. 30–100 % #} {% set d_clamped = [ [d, 100] | min, 30 ] | max %} {{ d_clamped | round(1) }} {% endif %} {% else %} unknown {% endif %} {% else %} unknown {% endif %}) renders=412> all_states=False all_states_lifecycle=False domains=frozenset() domains_lifecycle=frozenset() entities=frozenset({'sensor.faikout_stylish_outside', 'pyscript.daikin_ml_params', 'input_number.daikin_setpoint'}) rate_limit=None has_time=False exception=None is_static=False>, Template<template=({% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% if t_out is not none %} {% set bucket = ((t_out * 10) | round(0) / 10) %} {{ '{:.1f}'.format(bucket) }} {% else %} unknown {% endif %}) renders=394>: <RenderInfo Template<template=({% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% if t_out is not none %} {% set bucket = ((t_out * 10) | round(0) / 10) %} {{ '{:.1f}'.format(bucket) }} {% else %} unknown {% endif %}) renders=394> all_states=False all_states_lifecycle=False domains=frozenset() domains_lifecycle=frozenset() entities=frozenset({'sensor.faikout_stylish_outside'}) rate_limit=None has_time=False exception=None is_static=False>, Template<template=({% set tb = state_attr('pyscript.daikin_ml_params', 'theta_by_ctx') %} {% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% if tb is not none and t_out is not none %} {% set bucket = ((t_out * 10) | round(0) / 10) %} {% set ctx = '{:.1f}'.format(bucket) %} {% set th = tb.get(ctx) %} {{ th if th is not none else 'none' }} {% else %} none {% endif %}) renders=394>: <RenderInfo Template<template=({% set tb = state_attr('pyscript.daikin_ml_params', 'theta_by_ctx') %} {% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% if tb is not none and t_out is not none %} {% set bucket = ((t_out * 10) | round(0) / 10) %} {% set ctx = '{:.1f}'.format(bucket) %} {% set th = tb.get(ctx) %} {{ th if th is not none else 'none' }} {% else %} none {% endif %}) renders=394> all_states=False all_states_lifecycle=False domains=frozenset() domains_lifecycle=frozenset() entities=frozenset({'sensor.faikout_stylish_outside', 'pyscript.daikin_ml_params'}) rate_limit=None has_time=False exception=None is_static=False>}>>>
Error while dispatching event for sensor.faikout_stylish_outside to <Job track state_changed event {'input_number.daikin_setpoint', 'sensor.faikout_stylish_outside', 'pyscript.daikin_ml_params'} HassJobType.Callback <bound method TrackTemplateResultInfo._refresh of <TrackTemplateResultInfo {Template<template=({% set tb = state_attr('pyscript.daikin_ml_params', 'theta_by_ctx') %} {% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% set sp = states('input_number.daikin_setpoint') | float(22.5) %} {% if tb is not none and t_out is not none %} {# sama 0,1 °C bucketointi kuin daikin_ml.py:ssä #} {% set bucket = ((t_out * 10) | round(0) / 10) %} {% set ctx = '{:.1f}'.format(bucket) %} {% set th = tb.get(ctx) %} {% if th is not none and th | length >= 4 %} {% set t0 = th[0] | float %} {% set t2 = th[2] | float %} {% set t3 = th[3] | float %} {# Jos gain eli t2 on liian pieni, ei uskalleta laskea mitään järkevää #} {% if (t2 | abs) < 0.001 %} unknown {% else %} {# Tasapaino-olettama: Tin ≈ SP, Tout ≈ t_out #} {% set num = -(t0 + t3 * (t_out - sp)) %} {% set d = num / t2 * 100.0 %} {# Rajataan järkeviin rajoihin, esim. 30–100 % #} {% set d_clamped = [ [d, 100] | min, 30 ] | max %} {{ d_clamped | round(1) }} {% endif %} {% else %} unknown {% endif %} {% else %} unknown {% endif %}) renders=414>: <RenderInfo Template<template=({% set tb = state_attr('pyscript.daikin_ml_params', 'theta_by_ctx') %} {% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% set sp = states('input_number.daikin_setpoint') | float(22.5) %} {% if tb is not none and t_out is not none %} {# sama 0,1 °C bucketointi kuin daikin_ml.py:ssä #} {% set bucket = ((t_out * 10) | round(0) / 10) %} {% set ctx = '{:.1f}'.format(bucket) %} {% set th = tb.get(ctx) %} {% if th is not none and th | length >= 4 %} {% set t0 = th[0] | float %} {% set t2 = th[2] | float %} {% set t3 = th[3] | float %} {# Jos gain eli t2 on liian pieni, ei uskalleta laskea mitään järkevää #} {% if (t2 | abs) < 0.001 %} unknown {% else %} {# Tasapaino-olettama: Tin ≈ SP, Tout ≈ t_out #} {% set num = -(t0 + t3 * (t_out - sp)) %} {% set d = num / t2 * 100.0 %} {# Rajataan järkeviin rajoihin, esim. 30–100 % #} {% set d_clamped = [ [d, 100] | min, 30 ] | max %} {{ d_clamped | round(1) }} {% endif %} {% else %} unknown {% endif %} {% else %} unknown {% endif %}) renders=414> all_states=False all_states_lifecycle=False domains=frozenset() domains_lifecycle=frozenset() entities=frozenset({'sensor.faikout_stylish_outside', 'pyscript.daikin_ml_params', 'input_number.daikin_setpoint'}) rate_limit=None has_time=False exception=None is_static=False>, Template<template=({% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% if t_out is not none %} {% set bucket = ((t_out * 10) | round(0) / 10) %} {{ '{:.1f}'.format(bucket) }} {% else %} unknown {% endif %}) renders=396>: <RenderInfo Template<template=({% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% if t_out is not none %} {% set bucket = ((t_out * 10) | round(0) / 10) %} {{ '{:.1f}'.format(bucket) }} {% else %} unknown {% endif %}) renders=396> all_states=False all_states_lifecycle=False domains=frozenset() domains_lifecycle=frozenset() entities=frozenset({'sensor.faikout_stylish_outside'}) rate_limit=None has_time=False exception=None is_static=False>, Template<template=({% set tb = state_attr('pyscript.daikin_ml_params', 'theta_by_ctx') %} {% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% if tb is not none and t_out is not none %} {% set bucket = ((t_out * 10) | round(0) / 10) %} {% set ctx = '{:.1f}'.format(bucket) %} {% set th = tb.get(ctx) %} {{ th if th is not none else 'none' }} {% else %} none {% endif %}) renders=396>: <RenderInfo Template<template=({% set tb = state_attr('pyscript.daikin_ml_params', 'theta_by_ctx') %} {% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% if tb is not none and t_out is not none %} {% set bucket = ((t_out * 10) | round(0) / 10) %} {% set ctx = '{:.1f}'.format(bucket) %} {% set th = tb.get(ctx) %} {{ th if th is not none else 'none' }} {% else %} none {% endif %}) renders=396> all_states=False all_states_lifecycle=False domains=frozenset() domains_lifecycle=frozenset() entities=frozenset({'sensor.faikout_stylish_outside', 'pyscript.daikin_ml_params'}) rate_limit=None has_time=False exception=None is_static=False>}>>>
Error while dispatching event for sensor.faikout_stylish_outside to <Job track state_changed event {'input_number.daikin_setpoint', 'sensor.faikout_stylish_outside', 'pyscript.daikin_ml_params'} HassJobType.Callback <bound method TrackTemplateResultInfo._refresh of <TrackTemplateResultInfo {Template<template=({% set tb = state_attr('pyscript.daikin_ml_params', 'theta_by_ctx') %} {% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% set sp = states('input_number.daikin_setpoint') | float(22.5) %} {% if tb is not none and t_out is not none %} {# sama 0,1 °C bucketointi kuin daikin_ml.py:ssä #} {% set bucket = ((t_out * 10) | round(0) / 10) %} {% set ctx = '{:.1f}'.format(bucket) %} {% set th = tb.get(ctx) %} {% if th is not none and th | length >= 4 %} {% set t0 = th[0] | float %} {% set t2 = th[2] | float %} {% set t3 = th[3] | float %} {# Jos gain eli t2 on liian pieni, ei uskalleta laskea mitään järkevää #} {% if (t2 | abs) < 0.001 %} unknown {% else %} {# Tasapaino-olettama: Tin ≈ SP, Tout ≈ t_out #} {% set num = -(t0 + t3 * (t_out - sp)) %} {% set d = num / t2 * 100.0 %} {# Rajataan järkeviin rajoihin, esim. 30–100 % #} {% set d_clamped = [ [d, 100] | min, 30 ] | max %} {{ d_clamped | round(1) }} {% endif %} {% else %} unknown {% endif %} {% else %} unknown {% endif %}) renders=416>: <RenderInfo Template<template=({% set tb = state_attr('pyscript.daikin_ml_params', 'theta_by_ctx') %} {% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% set sp = states('input_number.daikin_setpoint') | float(22.5) %} {% if tb is not none and t_out is not none %} {# sama 0,1 °C bucketointi kuin daikin_ml.py:ssä #} {% set bucket = ((t_out * 10) | round(0) / 10) %} {% set ctx = '{:.1f}'.format(bucket) %} {% set th = tb.get(ctx) %} {% if th is not none and th | length >= 4 %} {% set t0 = th[0] | float %} {% set t2 = th[2] | float %} {% set t3 = th[3] | float %} {# Jos gain eli t2 on liian pieni, ei uskalleta laskea mitään järkevää #} {% if (t2 | abs) < 0.001 %} unknown {% else %} {# Tasapaino-olettama: Tin ≈ SP, Tout ≈ t_out #} {% set num = -(t0 + t3 * (t_out - sp)) %} {% set d = num / t2 * 100.0 %} {# Rajataan järkeviin rajoihin, esim. 30–100 % #} {% set d_clamped = [ [d, 100] | min, 30 ] | max %} {{ d_clamped | round(1) }} {% endif %} {% else %} unknown {% endif %} {% else %} unknown {% endif %}) renders=416> all_states=False all_states_lifecycle=False domains=frozenset() domains_lifecycle=frozenset() entities=frozenset({'sensor.faikout_stylish_outside', 'pyscript.daikin_ml_params', 'input_number.daikin_setpoint'}) rate_limit=None has_time=False exception=None is_static=False>, Template<template=({% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% if t_out is not none %} {% set bucket = ((t_out * 10) | round(0) / 10) %} {{ '{:.1f}'.format(bucket) }} {% else %} unknown {% endif %}) renders=398>: <RenderInfo Template<template=({% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% if t_out is not none %} {% set bucket = ((t_out * 10) | round(0) / 10) %} {{ '{:.1f}'.format(bucket) }} {% else %} unknown {% endif %}) renders=398> all_states=False all_states_lifecycle=False domains=frozenset() domains_lifecycle=frozenset() entities=frozenset({'sensor.faikout_stylish_outside'}) rate_limit=None has_time=False exception=None is_static=False>, Template<template=({% set tb = state_attr('pyscript.daikin_ml_params', 'theta_by_ctx') %} {% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% if tb is not none and t_out is not none %} {% set bucket = ((t_out * 10) | round(0) / 10) %} {% set ctx = '{:.1f}'.format(bucket) %} {% set th = tb.get(ctx) %} {{ th if th is not none else 'none' }} {% else %} none {% endif %}) renders=398>: <RenderInfo Template<template=({% set tb = state_attr('pyscript.daikin_ml_params', 'theta_by_ctx') %} {% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% if tb is not none and t_out is not none %} {% set bucket = ((t_out * 10) | round(0) / 10) %} {% set ctx = '{:.1f}'.format(bucket) %} {% set th = tb.get(ctx) %} {{ th if th is not none else 'none' }} {% else %} none {% endif %}) renders=398> all_states=False all_states_lifecycle=False domains=frozenset() domains_lifecycle=frozenset() entities=frozenset({'sensor.faikout_stylish_outside', 'pyscript.daikin_ml_params'}) rate_limit=None has_time=False exception=None is_static=False>}>>>
Error while dispatching event for sensor.faikout_stylish_outside to <Job track state_changed event {'input_number.daikin_setpoint', 'sensor.faikout_stylish_outside', 'pyscript.daikin_ml_params'} HassJobType.Callback <bound method TrackTemplateResultInfo._refresh of <TrackTemplateResultInfo {Template<template=({% set tb = state_attr('pyscript.daikin_ml_params', 'theta_by_ctx') %} {% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% set sp = states('input_number.daikin_setpoint') | float(22.5) %} {% if tb is not none and t_out is not none %} {# sama 0,1 °C bucketointi kuin daikin_ml.py:ssä #} {% set bucket = ((t_out * 10) | round(0) / 10) %} {% set ctx = '{:.1f}'.format(bucket) %} {% set th = tb.get(ctx) %} {% if th is not none and th | length >= 4 %} {% set t0 = th[0] | float %} {% set t2 = th[2] | float %} {% set t3 = th[3] | float %} {# Jos gain eli t2 on liian pieni, ei uskalleta laskea mitään järkevää #} {% if (t2 | abs) < 0.001 %} unknown {% else %} {# Tasapaino-olettama: Tin ≈ SP, Tout ≈ t_out #} {% set num = -(t0 + t3 * (t_out - sp)) %} {% set d = num / t2 * 100.0 %} {# Rajataan järkeviin rajoihin, esim. 30–100 % #} {% set d_clamped = [ [d, 100] | min, 30 ] | max %} {{ d_clamped | round(1) }} {% endif %} {% else %} unknown {% endif %} {% else %} unknown {% endif %}) renders=418>: <RenderInfo Template<template=({% set tb = state_attr('pyscript.daikin_ml_params', 'theta_by_ctx') %} {% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% set sp = states('input_number.daikin_setpoint') | float(22.5) %} {% if tb is not none and t_out is not none %} {# sama 0,1 °C bucketointi kuin daikin_ml.py:ssä #} {% set bucket = ((t_out * 10) | round(0) / 10) %} {% set ctx = '{:.1f}'.format(bucket) %} {% set th = tb.get(ctx) %} {% if th is not none and th | length >= 4 %} {% set t0 = th[0] | float %} {% set t2 = th[2] | float %} {% set t3 = th[3] | float %} {# Jos gain eli t2 on liian pieni, ei uskalleta laskea mitään järkevää #} {% if (t2 | abs) < 0.001 %} unknown {% else %} {# Tasapaino-olettama: Tin ≈ SP, Tout ≈ t_out #} {% set num = -(t0 + t3 * (t_out - sp)) %} {% set d = num / t2 * 100.0 %} {# Rajataan järkeviin rajoihin, esim. 30–100 % #} {% set d_clamped = [ [d, 100] | min, 30 ] | max %} {{ d_clamped | round(1) }} {% endif %} {% else %} unknown {% endif %} {% else %} unknown {% endif %}) renders=418> all_states=False all_states_lifecycle=False domains=frozenset() domains_lifecycle=frozenset() entities=frozenset({'sensor.faikout_stylish_outside', 'pyscript.daikin_ml_params', 'input_number.daikin_setpoint'}) rate_limit=None has_time=False exception=None is_static=False>, Template<template=({% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% if t_out is not none %} {% set bucket = ((t_out * 10) | round(0) / 10) %} {{ '{:.1f}'.format(bucket) }} {% else %} unknown {% endif %}) renders=400>: <RenderInfo Template<template=({% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% if t_out is not none %} {% set bucket = ((t_out * 10) | round(0) / 10) %} {{ '{:.1f}'.format(bucket) }} {% else %} unknown {% endif %}) renders=400> all_states=False all_states_lifecycle=False domains=frozenset() domains_lifecycle=frozenset() entities=frozenset({'sensor.faikout_stylish_outside'}) rate_limit=None has_time=False exception=None is_static=False>, Template<template=({% set tb = state_attr('pyscript.daikin_ml_params', 'theta_by_ctx') %} {% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% if tb is not none and t_out is not none %} {% set bucket = ((t_out * 10) | round(0) / 10) %} {% set ctx = '{:.1f}'.format(bucket) %} {% set th = tb.get(ctx) %} {{ th if th is not none else 'none' }} {% else %} none {% endif %}) renders=400>: <RenderInfo Template<template=({% set tb = state_attr('pyscript.daikin_ml_params', 'theta_by_ctx') %} {% set t_out = states('sensor.faikout_stylish_outside') | float(default=none) %} {% if tb is not none and t_out is not none %} {% set bucket = ((t_out * 10) | round(0) / 10) %} {% set ctx = '{:.1f}'.format(bucket) %} {% set th = tb.get(ctx) %} {{ th if th is not none else 'none' }} {% else %} none {% endif %}) renders=400> all_states=False all_states_lifecycle=False domains=frozenset() domains_lifecycle=frozenset() entities=frozenset({'sensor.faikout_stylish_outside', 'pyscript.daikin_ml_params'}) rate_limit=None has_time=False exception=None is_static=False>}>>>
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/sensor/__init__.py", line 684, in state
    numerical_value = int(value)
ValueError: invalid literal for int() with base 10: 'unknown'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/sensor/__init__.py", line 687, in state
    numerical_value = float(value)
ValueError: could not convert string to float: 'unknown'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/event.py", line 360, in _async_dispatch_entity_id_event
    hass.async_run_hass_job(job, event)
    ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/core.py", line 918, in async_run_hass_job
    hassjob.target(*args)
    ~~~~~~~~~~~~~~^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/event.py", line 1319, in _refresh
    self.hass.async_run_hass_job(self._job, event, updates)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/core.py", line 918, in async_run_hass_job
    hassjob.target(*args)
    ~~~~~~~~~~~~~~^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/template/template_entity.py", line 357, in _handle_results
    self.async_write_ha_state()
    ~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1024, in async_write_ha_state
    self._async_write_ha_state()
    ~~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1149, in _async_write_ha_state
    self.__async_calculate_state()
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1086, in __async_calculate_state
    state = self._stringify_state(available)
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1030, in _stringify_state
    if (state := self.state) is None:
                 ^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/sensor/__init__.py", line 691, in state
    raise ValueError(
    ...<5 lines>...
    ) from err
ValueError: Sensor sensor.daikin_ml_learned_demand has device class 'None', state class 'None' unit '%' and suggested precision 'None' thus indicating it has a numeric value; however, it has the non-numeric value: 'unknown' (<class 'str'>)

Koodi:
Logger: homeassistant.components.automation.daikin_demand_control_p_saadin_22_5degc_select
Source: components/automation/__init__.py:799
integration: Automation (documentation, issues)
First occurred: 16:38:42 (50 occurrences)
Last logged: 17:38:52

Error while executing automation automation.daikin_demand_control_p_saadin_22_5degc_select: Option 94 is not valid for entity select.faikout_stylish_demand_control, valid options are: 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100
Error while executing automation automation.daikin_demand_control_p_saadin_22_5degc_select: Option 79 is not valid for entity select.faikout_stylish_demand_control, valid options are: 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100
Error while executing automation automation.daikin_demand_control_p_saadin_22_5degc_select: Option 74 is not valid for entity select.faikout_stylish_demand_control, valid options are: 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100
Error while executing automation automation.daikin_demand_control_p_saadin_22_5degc_select: Option 69 is not valid for entity select.faikout_stylish_demand_control, valid options are: 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100

Koodi:
Logger: homeassistant.components.automation.daikin_demand_control_p_saadin_22_5degc_select
Source: helpers/script.py:2064
integration: Automation (documentation, issues)
First occurred: 16:38:42 (100 occurrences)
Last logged: 17:38:52

Daikin demand control - P-säädin 22.5°C (select): Error executing script. Error for choose at pos 2: Option 79 is not valid for entity select.faikout_stylish_demand_control, valid options are: 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100
Daikin demand control - P-säädin 22.5°C (select): Choose at step 2: choice 1: Error executing script. Error for call_service at pos 1: Option 74 is not valid for entity select.faikout_stylish_demand_control, valid options are: 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100
Daikin demand control - P-säädin 22.5°C (select): Error executing script. Error for choose at pos 2: Option 74 is not valid for entity select.faikout_stylish_demand_control, valid options are: 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100
Daikin demand control - P-säädin 22.5°C (select): Choose at step 2: choice 1: Error executing script. Error for call_service at pos 1: Option 69 is not valid for entity select.faikout_stylish_demand_control, valid options are: 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100
Daikin demand control - P-säädin 22.5°C (select): Error executing script. Error for choose at pos 2: Option 69 is not valid for entity select.faikout_stylish_demand_control, valid options are: 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100
 

Luukku

Vakionaama
Tiesittekö muuten, että Faikout ottaa minkä vaan % välillä 30-100 vaikka DC:n säätö on vaan 5% välein, eli vaikka 57,62, 63 jne. Logissa näyttää herjaavan tuota, kun 5 välein sallittu eikä lähetetty arvo vastaa niitä.
 
Viimeksi muokattu:

heebo1974

Aktiivinen jäsen
Nyt on ruuvitagit haettu ja liitetty HA:an. Näköjään tosiaan toimivat shellyjen bluetooth proxyllä. Tarkkailen ehkä päivän tuloksia, ennenkuin siirrän "tuotanto" käyttöön. Raportoivat ns. kokoajan verrattuna noihin zigbee härpättimiin.
 

Koelli

Aktiivinen jäsen
Nyt on ruuvitagit haettu ja liitetty HA:an. Näköjään tosiaan toimivat shellyjen bluetooth proxyllä. Tarkkailen ehkä päivän tuloksia, ennenkuin siirrän "tuotanto" käyttöön. Raportoivat ns. kokoajan verrattuna noihin zigbee härpättimiin.
Muuttuiko ohjaus tarkemmaksi? Tai huomasitko mitään muutosta?

Jaa, tosiaan, taisit tarkottaa tuotantokäytöllä juuri sitä, mistä kysyin kokemuksia. Never mind.
 

Koelli

Aktiivinen jäsen
Tuli mieleen tuosta pörssisähköön liittyvästä demand-kontrollista: senhän pitäisi olla ehdottomasti ulkolämpötilariippuvainen.

Kylmällä säällä talo jäähtyy nopeammin, ja lämpenee hitaammin, joten olisi järkevää muuttaa tuo pörssisähkön aikaikkuna dynaamisesti ohjattavaksi ulkolämpötilan mukaan.
 
Back
Ylös Bottom