Daikin + Faikout + Machine Learning

heebo1974

Aktiivinen jäsen
Sehän se vedoneston sitten aktivoi.
No ainakin tässä klo 12.15 tapauksessa. Eli juuri kun ollaan päästy normaalitilaan, niin sattui tulemaan pörssissä kalliimpi hetki ja setpointti pudotettiin aavistuksen. Tuuripeliä toki. Mut mielestäni menee liian helposti päälle, mutta ei kovinkaan helposti mene pois päältä.
 

heebo1974

Aktiivinen jäsen
Voi olla, että helpoin ratkaisu voisi tilanteessani olla se, että kylmästi vaan nostan setpointtia hiukan. Esim. 23:een.
Se voi olla ratkaiseva ero, ettei tuo draft prevention mene niin helposti päälle. Tai mikä se setpoint sitten onkaan selviäisi kokeilemalla.
Energian kulutus toki vähän kasvaisi, mutta eipä noilla minimitehoilla sitä paljoa ole.
Vaimokin varmaan tykkäisi, kun olisi vähän lämpöisempää. :) Ollaan sellaisia vilukissoja kyllä molemmat.
 

Luukku

Vakionaama
Tuo pörssiohjaus, kyllä vaatisi sen etukäteen tehtävän buustin lämpötilaan ennen kalliita tunteja. Tosin heiluttaa lämpötiloja, mutta ei tarvii pörssihintavaloa, kun pörssihinnan tuntee iholla :)
 

heebo1974

Aktiivinen jäsen
Voi olla, että helpoin ratkaisu voisi tilanteessani olla se, että kylmästi vaan nostan setpointtia hiukan. Esim. 23:een.
Toinen vaihtoehto on ne minimi DC:t. Eli etsin minimi DC:n jolla nestelämmöt eivät laske alle liikaa. Tosin tämä tekee sitten ihan samaa, eli todennäköisesti ylilämmittää.
 

heebo1974

Aktiivinen jäsen
Tässä tulos.. Heti kun päästiin tavoitteeseen pamahtaa draft prevention päälle. Ja sen jälkeen pudotaankin heti setpointin alle.
1768481137213.png


Sattumoisin vielä tuohon päätteeksi alkoi sulatus. Eli taitaapi kestää kauan ennenkuin ollaan taas setpointissa. :)
 

Koelli

Aktiivinen jäsen
Tässä tulos.. Heti kun päästiin tavoitteeseen pamahtaa draft prevention päälle. Ja sen jälkeen pudotaankin heti setpointin alle.
katso liitettä 112367

Sattumoisin vielä tuohon päätteeksi alkoi sulatus. Eli taitaapi kestää kauan ennenkuin ollaan taas setpointissa. :)
Näen saman ilmiön täällä. Hyvä, että näin, koska tällöin tuo ei ole vain yhden ympäristön ilmiö. Hyvä puoli tässä on se, että tämä onnistutaan todennäköisesti korjaamaan vain parametri-muutoksilla.
 

heebo1974

Aktiivinen jäsen
Kaikki vispaukset pois ja puhallus ihan ylös suoraan. Sit vähän alas jos on joku este lähellä esim oviaukon yläosa tms.
Jep nyt vispilät pois... Ylös oli muutenkin puhallus. On se kumma mitä kaikkea ihmeellisyyksiä näissä laitteissa onkaan.
Pikkusen saisivat tehdä "kotiinkutsuja" ja päivittää softat näihin vehkeisiin kyllä ilmaiseksi.

Jonkun pitäis masinoida joukkokanne.
 

Luukku

Vakionaama
Mulla on semmonen teoria, että ilpin ilmankiertoon pitää saada samanlainen ilmiö kuin syntyy suihkukoneen laskeutuessa kiitotielle jossa pölläyttää savut renkaista sinne taakse. Näkyy sellainen "jättöpyörre". Reunoilta nousee keskelle. Tiedätte varmaan mitä tarkoitan?
 

heebo1974

Aktiivinen jäsen
Ei tullut kuin yksi sulatus ja aika nopeasti kuitenkin päästiin setpointtiin.
1768489490689.png


Toisaalta setpoint tuli kivasti vastaan.
 

Koelli

Aktiivinen jäsen
Dev-haarasta löytyy nyt tunnin verran ajossa ollut versio, joka ensituntumalla ei niin radikaalisesti laske/nosta demandia. Huomattavaa on, että muutoksia on sekä pääkontrolleriin, että configiin.
 

heebo1974

Aktiivinen jäsen
Dev-haarasta löytyy nyt tunnin verran ajossa ollut versio, joka ensituntumalla ei niin radikaalisesti laske/nosta demandia. Huomattavaa on, että muutoksia on sekä pääkontrolleriin, että configiin.
Päivitetty. Nostin samalla base setpointin alakerrassa 23 asteeseen. Alaraja 22.5 ja yläraja 23.5.
Takkaa ei ole tänään lämmitetty ja ei lämmitetä huomennakaan.
 
Viimeksi muokattu:

Luukku

Vakionaama
Kyllä noista käyristä näkee hyvin, että päästää DC:n aika alas ja vasta maksimi DC saa lämmön nousuun. Tosiaan jonkinlainen minimi vs ulkolämpö ehkä tasaisi pumpun käyntiä. Noi DC 40-50 ei jaksa pakkasilla pitää kennoa riittävän lämpimänä. Mulla yläkerran minimi 60% ulkona -3. Sääkerroin pitää DC:n ylempänä.
Edit: jopa DC30% välillä.

Edit:2 miksi muuten pumpun teho ei nouse vaikka DC100%? Vaan 500W?
Jumi?
 
Viimeksi muokattu:

heebo1974

Aktiivinen jäsen
Kyllä noista käyristä näkee hyvin, että päästää DC:n aika alas ja vasta maksimi DC saa lämmön nousuun. Tosiaan jonkinlainen minimi vs ulkolämpö ehkä tasaisi pumpun käyntiä. Noi DC 40-50 ei jaksa pakkasilla pitää kennoa riittävän lämpimänä. Mulla yläkerran minimi 60% ulkona -3. Sääkerroin pitää DC:n ylempänä.
Edit: jopa DC30% välillä.

Edit:2 miksi muuten pumpun teho ei nouse vaikka DC100%? Vaan 500W?
Jumi?
Ehkä huonosti näkyy, mutta DC95
 

heebo1974

Aktiivinen jäsen
Vähän taas mietityttää. Se megaluokan errori oli taas ilmestynyt logeihin.
Lisäksi aika oudon hitaasti ML Demandikaan muuttuu.
1768505088866.png


1768505106276.png


Taidanpa käynnistää HA:n uudelleen. Ihan varmuudeksi.
 

Koelli

Aktiivinen jäsen
Vähän taas mietityttää. Se megaluokan errori oli taas ilmestynyt logeihin.
Lisäksi aika oudon hitaasti ML Demandikaan muuttuu.
katso liitettä 112401

katso liitettä 112402

Taidanpa käynnistää HA:n uudelleen. Ihan varmuudeksi.
Kyllä, jotain on pielessä tuossa nyt.

Laitahan Logia tännepäin, niin katsotaan - jos siis sensori ei ala päivittämään lukemia ja/tai muuta häikkää.
 
Viimeksi muokattu:

heebo1974

Aktiivinen jäsen
Ei auttanut HA bootti. Mutta sitten ajoin vielä scriptin uudelleenkäynnistyksen ja nyt ehkä lähti taas lyyti kirjoittamaan.
 

heebo1974

Aktiivinen jäsen
Mutta tämä megaerrori tulee silti logiin:

Logger: homeassistant.helpers.event
Source: helpers/event.py:360
First occurred: 21:41:44 (1 occurrence)
Last logged: 21:41:44

Error while dispatching event for sensor.outside_filtered_faikout_stylish to <Job track state_changed event {'input_number.daikin_setpoint', 'sensor.outside_filtered_faikout_stylish', '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.outside_filtered_faikout_stylish') | 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=14>: <RenderInfo Template<template=({% set tb = state_attr('pyscript.daikin_ml_params', 'theta_by_ctx') %} {% set t_out = states('sensor.outside_filtered_faikout_stylish') | 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=14> all_states=False all_states_lifecycle=False domains=frozenset() domains_lifecycle=frozenset() entities=frozenset({'pyscript.daikin_ml_params', 'input_number.daikin_setpoint', 'sensor.outside_filtered_faikout_stylish'}) rate_limit=None has_time=False exception=None is_static=False>, Template<template=({% set t_out = states('sensor.outside_filtered_faikout_stylish') | float(default=none) %} {% if t_out is not none %} {% set bucket = ((t_out * 10) | round(0) / 10) %} {{ '{:.1f}'.format(bucket) }} {% else %} unknown {% endif %}) renders=10>: <RenderInfo Template<template=({% set t_out = states('sensor.outside_filtered_faikout_stylish') | float(default=none) %} {% if t_out is not none %} {% set bucket = ((t_out * 10) | round(0) / 10) %} {{ '{:.1f}'.format(bucket) }} {% else %} unknown {% endif %}) renders=10> all_states=False all_states_lifecycle=False domains=frozenset() domains_lifecycle=frozenset() entities=frozenset({'sensor.outside_filtered_faikout_stylish'}) 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.outside_filtered_faikout_stylish') | 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=10>: <RenderInfo Template<template=({% set tb = state_attr('pyscript.daikin_ml_params', 'theta_by_ctx') %} {% set t_out = states('sensor.outside_filtered_faikout_stylish') | 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=10> all_states=False all_states_lifecycle=False domains=frozenset() domains_lifecycle=frozenset() entities=frozenset({'pyscript.daikin_ml_params', 'sensor.outside_filtered_faikout_stylish'}) 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'>)
 
Viimeksi muokattu:

Koelli

Aktiivinen jäsen
Mutta tämä megaerrori tulee silti logiin:

Koodi:
Logger: homeassistant.helpers.event
Source: helpers/event.py:360
First occurred: 21:41:44 (1 occurrence)
Last logged: 21:41:44

Error while dispatching event for sensor.outside_filtered_faikout_stylish to <Job track state_changed event {'input_number.daikin_setpoint', 'sensor.outside_filtered_faikout_stylish', '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.outside_filtered_faikout_stylish') | 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=14>: <RenderInfo Template<template=({% set tb = state_attr('pyscript.daikin_ml_params', 'theta_by_ctx') %} {% set t_out = states('sensor.outside_filtered_faikout_stylish') | 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=14> all_states=False all_states_lifecycle=False domains=frozenset() domains_lifecycle=frozenset() entities=frozenset({'pyscript.daikin_ml_params', 'input_number.daikin_setpoint', 'sensor.outside_filtered_faikout_stylish'}) rate_limit=None has_time=False exception=None is_static=False>, Template<template=({% set t_out = states('sensor.outside_filtered_faikout_stylish') | float(default=none) %} {% if t_out is not none %} {% set bucket = ((t_out * 10) | round(0) / 10) %} {{ '{:.1f}'.format(bucket) }} {% else %} unknown {% endif %}) renders=10>: <RenderInfo Template<template=({% set t_out = states('sensor.outside_filtered_faikout_stylish') | float(default=none) %} {% if t_out is not none %} {% set bucket = ((t_out * 10) | round(0) / 10) %} {{ '{:.1f}'.format(bucket) }} {% else %} unknown {% endif %}) renders=10> all_states=False all_states_lifecycle=False domains=frozenset() domains_lifecycle=frozenset() entities=frozenset({'sensor.outside_filtered_faikout_stylish'}) 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.outside_filtered_faikout_stylish') | 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=10>: <RenderInfo Template<template=({% set tb = state_attr('pyscript.daikin_ml_params', 'theta_by_ctx') %} {% set t_out = states('sensor.outside_filtered_faikout_stylish') | 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=10> all_states=False all_states_lifecycle=False domains=frozenset() domains_lifecycle=frozenset() entities=frozenset({'pyscript.daikin_ml_params', 'sensor.outside_filtered_faikout_stylish'}) 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'>)
Toi on itse asiassa (kauneus)virhe siinä template sensorissa, joka on sulla configuration.yaml:ssa. Tässä pitäisi olla korjattu versio, jossa mun iv_tulo_lampotila. Tämä toki vain yhdelle Daikinille.

Eli vielä täsmennyksenä: tällä sensorilla ei ohjauksen kannalta ole merkitystä. Mutta nyt ei pitäisi tulla logiin enää tuota ongelmaa.

Koodi:
      - name: "Daikin ML learned demand"
        unique_id: daikin_ml_learned_demand
        unit_of_measurement: "%"
        state: >
          {% set tb = state_attr('pyscript.daikin_ml_params', 'theta_by_ctx') %}
          {% set t_out = states('sensor.iv_tulo_lampotila') | float(default=none) %}
          {% set sp = states('input_number.daikin_setpoint') | float(default=none) %}

          {% if tb is none or t_out is none or sp is none %}
            {{ none }}
          {% else %}
            {% set bucket = ((t_out * 10) | round(0) / 10) %}
            {% set ctx = '{:.1f}'.format(bucket) %}
            {% set th = tb.get(ctx) %}
            {% if th is none or (th | length) < 4 %}
              {{ none }}
            {% else %}
              {% set t0 = th[0] | float(default=none) %}
              {% set t2 = th[2] | float(default=none) %}
              {% set t3 = th[3] | float(default=none) %}
              {% if t0 is none or t2 is none or t3 is none or (t2 | abs) < 0.001 %}
                {{ none }}
              {% else %}
                {% set num = -(t0 + t3 * (t_out - sp)) %}
                {% set d = (num / t2) * 100.0 %}
                {% set d_clamped = [ [d, 100] | min, 30 ] | max %}
                {{ d_clamped | round(1) }}
              {% endif %}
            {% endif %}
          {% endif %}

        availability: >
          {% set tb = state_attr('pyscript.daikin_ml_params', 'theta_by_ctx') %}
          {% set t_out = states('s') | float(default=none) %}
          {% set sp = states('input_number.daikin_setpoint') | float(default=none) %}
          {{ tb is not none and t_out is not none and sp is not none }}
 

Koelli

Aktiivinen jäsen
Olen huomannut, että jos pidän Studio Code Serveriä päällä, syö se kaiken muistin ja CPU:n. Luulin, että nämä skriptit sen tekisivät, mutta se olikin tuo addon. Sekin saattaa olla syyllinen jossain poikkeustapauksessa, jos laitteessa on kovin vähän muistia (esimerkiksi).
 

heebo1974

Aktiivinen jäsen
Olen huomannut, että jos pidän Studio Code Serveriä päällä, syö se kaiken muistin ja CPU:n. Luulin, että nämä skriptit sen tekisivät, mutta se olikin tuo addon. Sekin saattaa olla syyllinen jossain poikkeustapauksessa, jos laitteessa on kovin vähän muistia (esimerkiksi).
Ei mulla HA:n kanssa ole mitään suorituskykyongelmia.
1768508001394.png
 

heebo1974

Aktiivinen jäsen
Vaikuttaa, että sulatuksen jälkeen loppuu toiminta.
Voisko liittyä tuohon ?
1768510484742.png

EDIT: reloadilla lähti jatkamaan
 
Viimeksi muokattu:

heebo1974

Aktiivinen jäsen
Yön yli oli toiminut. DC95 ei ole ylittynyt. Olisiko pitänyt ? Yläkerrassa tosin on 95 rajoitus, mutta mielenkiinto kohdistuu nyt alakertaan.
Derivaatat heittää häränpyllyä. Tosin heitin illalla vielä 4h ikkunan siihen, kun se tunti tuntui niin oudolta. Laitoin nyt 1h, kun olen taas tarkkailuasemissa. Pitikö se derivaatta anturi olla otettu siitä alkuperäisestä lämpötila-anturista vai siitä filtteröidystä ?
1768538965523.png

1768538998385.png
 

heebo1974

Aktiivinen jäsen
Hmm.. Jostain syystä daikin1:llä on max cap 95 ?
1768542649487.png

Tarkastin vielä kerran, että kaikki max demand input.numberit daikin1:lle oli 100%. daikin2:lla ne oli 95% paitsi alle -16C oli 100%.
Vai liittyykö tämä nyt johonkin pakkaseen ? Täällä on suht lauhaa. Nyt taitaa olla -2C.
 

Koelli

Aktiivinen jäsen
Hmm.. Jostain syystä daikin1:llä on max cap 95 ?
katso liitettä 112408
Tarkastin vielä kerran, että kaikki max demand input.numberit daikin1:lle oli 100%. daikin2:lla ne oli 95% paitsi alle -16C oli 100%.
Vai liittyykö tämä nyt johonkin pakkaseen ? Täällä on suht lauhaa. Nyt taitaa olla -2C.
Tarkistatko:

Helper: input_number.daikin_icing_cap
Config-python: GLOBAL_MILD_MAX

Mulla oli aamulla vastassa sama tilanne. Nämä muuttujat olivat riittävät ennen pitkää pakkasjaksoa, mutta nyt rakenteet ovat kylmät, eikä tuo 95 riitä lämmittämään Effective setpointiin, vaan jää laahaamaan reilusti alle. Ajattelin aluksi, että se on "by-design", koska malli yrittää etsiä alimman demandin, jolla pysytään lämpötilassa, ja ajattelin jo hetken, että se siinä on bugi, eikä se huomioi Effective setpointia ollenkaan.

No, onneksi näin ei ollut.
 

Koelli

Aktiivinen jäsen
Laitan itselleni muistutuksen, että pitänee malliin rakentaa sisälle ymmärrys sille, että demandit eivät ovat lineaarisia. Nyt malli, tavallaan, olettaa niin. Näinhän ei tosiaan ole, ja hyppy 95 -> 100 on sellainen, joka minimissään tulee huomioida.
 

Koelli

Aktiivinen jäsen
Yön yli oli toiminut. DC95 ei ole ylittynyt. Olisiko pitänyt ? Yläkerrassa tosin on 95 rajoitus, mutta mielenkiinto kohdistuu nyt alakertaan.
Derivaatat heittää häränpyllyä. Tosin heitin illalla vielä 4h ikkunan siihen, kun se tunti tuntui niin oudolta. Laitoin nyt 1h, kun olen taas tarkkailuasemissa. Pitikö se derivaatta anturi olla otettu siitä alkuperäisestä lämpötila-anturista vai siitä filtteröidystä ?
katso liitettä 112406
katso liitettä 112407
Olen kokeillut nyt filteröityä, ja tupla-filteröityä derivaatta-anturia, mutta en ole löytänyt yhtä oikeaa tapaa asettaa tuo. Tuntuu, että mikään ei ole oikein optimaalinen.

Koska tätä nyt tulee tehtyä vähän harrastuneisuuden vuoksi, niin kustannuksia ei lasketa. Tilasin siis toisen Apollon ja aion mitata kahdesta eri paikasta lämpötilaa ja tehdä keskiarvoisen derivaatan ja lämpötilamittauksen. Joskos se rajaisi piikkejä ylös ja alas.
 

Koelli

Aktiivinen jäsen
Jäänyt tämän mallin kehittäminen vähän myös taka-alalle. Ei liity faikoutiin, mutta tästä inspiroituneena tuli tehtyä pythonilla LVV:n, erilaisten Tuya-pohjaisten lattialämmitystermostaattien ja EV:n lataukseen liittyvät skriptit pörssisähkömielessä. Ne ovat tässä ajaneet vähän ohi, kun ei ole oikein ollut selviä kehityskohteita tälle mallille.

Ei tämä vieläkään täydellinen ole, mutta lähenee toimivaa :rolleyes:
 

heebo1974

Aktiivinen jäsen
Jäänyt tämän mallin kehittäminen vähän myös taka-alalle. Ei liity faikoutiin, mutta tästä inspiroituneena tuli tehtyä pythonilla LVV:n, erilaisten Tuya-pohjaisten lattialämmitystermostaattien ja EV:n lataukseen liittyvät skriptit pörssisähkömielessä. Ne ovat tässä ajaneet vähän ohi, kun ei ole oikein ollut selviä kehityskohteita tälle mallille.

Ei tämä vieläkään täydellinen ole, mutta lähenee toimivaa :rolleyes:
MINULLE MYÖS!! Täällä on käytössä ha ohjattavat lattialämmitykset ja lvv..
 

heebo1974

Aktiivinen jäsen
Olen kokeillut nyt filteröityä, ja tupla-filteröityä derivaatta-anturia, mutta en ole löytänyt yhtä oikeaa tapaa asettaa tuo. Tuntuu, että mikään ei ole oikein optimaalinen.
Mitäs jos sen derivaatta-anturin luo siitä alkuperäisestä lämpötila-anturista (niinkuin nyt minulla) ja sitten sen itse derivaatta-anturin suodattelee jotenkin ?
 

Koelli

Aktiivinen jäsen
MINULLE MYÖS!! Täällä on käytössä ha ohjattavat lattialämmitykset ja lvv..
Voin laittaa toki, mutta nämä ovat vielä melko raakileita. Onko sinulla LVV:ssä mahdollisuutta mitata veden lämpötilaa? Tein itse Quick&Dirty-ratkaisun, eli laitoin ohjauspaneelin sisälle Xiaomin anturin, ja laskin offsetin, jotta sain realistisen kuvan veden lämpötilasta.
 

heebo1974

Aktiivinen jäsen
Voin laittaa toki, mutta nämä ovat vielä melko raakileita. Onko sinulla LVV:ssä mahdollisuutta mitata veden lämpötilaa? Tein itse Quick&Dirty-ratkaisun, eli laitoin ohjauspaneelin sisälle Xiaomin anturin, ja laskin offsetin, jotta sain realistisen kuvan veden lämpötilasta.
Pystyn mittaamaan veden lämpötilaa. Tosin anturin on vain säiliön yläosassa ja veden kerrostuminen aiheuttaa haasteita.
Pystyn myös mittaamaan yhden vaiheen tehoa (jonka sitten kerron kolmella). Ja tietenkin ohjaamaan shellyllä kontaktoria.
 
Back
Ylös Bottom