Vraag


Acties:
  • 0 Henk 'm!

  • jmn77
  • Registratie: December 2024
  • Laatst online: 26-03 17:14
Hallo,

Ik wil graag weten hoe lang mijn radiatoren er over doen om de woonkamer op te warmen. Te meer omdat ik van die radiatorventilatoren heb aangeschaft en daar het effect van zou willen zien. Gewoon, omdat het kan...

Sinds kort gebruik ik Home Assistant vooral voor dashboardachtige functies zoals het weergeven van de totale opwek van mijn zonnepanelen en het totale energie gebruik op dit moment enzo. Daarnaast een paar lampjes al dan niet geautomatiseerd.

Voor de verwarming heb ik via de Integratie HomeKit Device toegang tot mijn Resideo thermostaat.
De entiteit Thermostaat heeft een aantal attributen. Hiervan heb ik met behulp van ChatGPT sensoren van gemaakt, zodat ik er mee kan rekenen (zie configuration-file).

Het lijkt allemaal goed te zitten, ik kan de juiste statussen uitlezen, alle testjes lijkt hij goed te doorstaan, behalve, als ik mijn thermostaat hoger zet dan de huidige temperatuur (dan zou hij dus een de huidige tijd als 'starttijd' moeten noteren) doet hij niks.
De tijd op het moment dat de temperaturen gelijk zijn, geeft hij wel prima weer.
Maar ja, vervolgens klopt het rekensommetje natuurlijk niet, als de starttijd niet klopt.

Dus de starttijd weigert hij weer te geven.
De eindtijd en de rekensom doet hij vervolgens wel goed.

Waar moet ik volgens jullie gaan zoeken? Of hoe kan ik dit probleem stap voor stap aanpakken? ChatGPT blijft ook maar rondjes draaien (heeft me wel aardig op weg geholpen, maar goed...)

Alvast bedankt, en hieronder nog wat code die ik al heb. En die (in mijn beginnersogen) goed lijkt. Al heb ik nog wat moeite met die Yaml-taal. Python, C++ lukt me beter...

Groet,
Johan

Mijn configuration-file ziet er zo uit (staat ook nog iets in over mijn omvormers, maar dat doet uiteraard niet mee):

YAML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# Loads default set of integrations. Do not remove.
default_config:

# Load frontend themes from the themes folder
frontend:
  themes: !include_dir_merge_named themes

automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml

input_datetime:
  opwarming_start:
    name: "Opwarming Start"
    has_date: true
    has_time: true
  opwarming_klaar:
    name: "Opwarming Klaar"
    has_date: true
    has_time: true


template:
  - sensor:
      - name: "Totaal vermogen Solis omvormers"
        unique_id: "solis_total_power"
        unit_of_measurement: "W"
        state: >
          {% set power1 = states('sensor.solis_ac_output_total_power') | float(0) %}
          {% set power2 = states('sensor.solis_ac_output_total_power_2') | float(0) %}
          {{ power1 + power2 }}

      - name: "Totaal kWh zonnepanelen"
        unique_id: "solis_total_kwh"
        unit_of_measurement: "kWh"
        state: >
          {% set kwh1 = states('sensor.solis_daily_grid_energy_used') | float(0) %}
          {% set kwh2 = states('sensor.solis_daily_grid_energy_used_2') | float(0) %}
          {{ kwh1 + kwh2 }}

      - name: "Thermostaat Huidige Temperatuur"
        unique_id: "thermostaat_current_temp"
        state: "{{ state_attr('climate.tstat_f2f769_t6_thermostat', 'current_temperature') }}"
        unit_of_measurement: "°C"

      - name: "Thermostaat Gewenste Temperatuur"
        unique_id: "thermostaat_target_temp"
        state: "{{ state_attr('climate.tstat_f2f769_t6_thermostat', 'temperature') }}"
        unit_of_measurement: "°C"

      - name: "Thermostaat HVAC Actie"
        unique_id: "thermostaat_hvac_action"
        state: "{{ state_attr('climate.tstat_f2f769_t6_thermostat', 'hvac_action') }}"

      - name: "Opwarming Totale Tijd"
        state: >
          {% set start = states('input_datetime.opwarming_start') %}
          {% set klaar = states('input_datetime.opwarming_klaar') %}
          {% if start and klaar and start != 'unknown' and klaar != 'unknown' %}
            {% set start_ts = as_timestamp(start) %}
            {% set klaar_ts = as_timestamp(klaar) %}
            {% set duur = klaar_ts - start_ts %}
            {% if duur >= 0 %}
              {{ (duur // 3600) | int }} uur {{ ((duur % 3600) // 60) | int }} min {{ (duur % 60) | int }} sec
            {% else %}
              Ongeldige tijdsberekening
            {% endif %}
          {% else %}
            Wacht op gegevens...
          {% endif %}


En mijn automation file (althans het gedeelte wat van belang is):

YAML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
- alias: "Automatische opwarming starttijd instellen"
  trigger:
    # Controleer of de gewenste temperatuur hoger is dan de huidige temperatuur
    - platform: template
      value_template: >
        {{ states('sensor.thermostaat_gewenste_temperatuur') | float > 
           states('sensor.thermostaat_huidige_temperatuur') | float }}
  condition:
    # Controleer of de starttijd nog niet is ingesteld
    - condition: template
      value_template: >
        {{ states('input_datetime.opwarming_start') in ['unknown', 'unavailable', ''] }}
  action:
    # Stel de huidige datum en tijd in als starttijd
    - service: input_datetime.set_datetime
      data:
        entity_id: input_datetime.opwarming_start
        date: "{{ now().strftime('%Y-%m-%d') }}"
        time: "{{ now().strftime('%H:%M:%S') }}"

- alias: "Automatische opwarming starttijd instellen"
  trigger:
    # Controleer of de gewenste temperatuur hoger is dan de huidige temperatuur
    - platform: template
      value_template: >
        {{ states('sensor.thermostaat_gewenste_temperatuur') | float > 
           states('sensor.thermostaat_huidige_temperatuur') | float }}
  condition:
    # Controleer of de starttijd nog niet is ingesteld
    - condition: template
      value_template: >
        {{ states('input_datetime.opwarming_start') in ['unknown', 'unavailable', ''] }}
  action:
    # Stel de huidige datum en tijd in als starttijd
    - service: input_datetime.set_datetime
      data:
        entity_id: input_datetime.opwarming_start
        date: "{{ now().strftime('%Y-%m-%d') }}"
        time: "{{ now().strftime('%H:%M:%S') }}"

- alias: "Opwarming Klaar Tijd"
  trigger:
    # Controleer of de huidige temperatuur de gewenste temperatuur bereikt of overschrijdt
    - platform: template
      value_template: >
        {{ states('sensor.thermostaat_huidige_temperatuur') | float >= 
           states('sensor.thermostaat_gewenste_temperatuur') | float }}
  condition:
    # Controleer of de starttijd al is ingesteld
    - condition: template
      value_template: >
        {{ states('input_datetime.opwarming_start') not in ['unknown', 'unavailable', ''] }}
  action:
    # Stel de huidige datum en tijd in als de klaar-tijd
    - service: input_datetime.set_datetime
      data:
        entity_id: input_datetime.opwarming_klaar
        date: "{{ now().strftime('%Y-%m-%d') }}"
        time: "{{ now().strftime('%H:%M:%S') }}"


En de code voor de Markdown card is deze (en die wordt ook netjes weergegeven op mijn dashboard).

Django/Jinja:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Opwarmingstijden
  **Opwarming Starttijd:**  
  {{ states('input_datetime.opwarming_start') }}

  **Opwarming Klaartijd:**  
  {{ states('input_datetime.opwarming_klaar') }}

  {% set start = states('input_datetime.opwarming_start') %}
  {% set klaar = states('input_datetime.opwarming_klaar') %}
  {% if start and klaar and start != 'unknown' and klaar != 'unknown' %}
    {% set start_ts = as_timestamp(start) %}
    {% set klaar_ts = as_timestamp(klaar) %}
    {% set duur = klaar_ts - start_ts %}
    {% if duur >= 0 %}
      **Totale Tijdsduur:**  
      {{ (duur // 3600) | int }} uur {{ ((duur % 3600) // 60) | int }} min {{ (duur % 60) | int }} sec
    {% else %}
      **Totale Tijdsduur:**  
      Ongeldige tijdsberekening
    {% endif %}
  {% else %}
    **Totale Tijdsduur:**  
    Wacht op gegevens...
  {% endif %}

[ Voor 0% gewijzigd door Septillion op 24-12-2024 13:19 . Reden: Denk aan de 'yaml' bij de code tags aub! Zie topic warning en hoe deze post is aangepast. ]

Alle reacties


Acties:
  • +1 Henk 'm!

  • The Fatal
  • Registratie: Maart 2009
  • Laatst online: 06:44
Heb even geen antwoord op je vraag. Maar lijkt me wel leuke berekening. Denk alleen wel dat je het nog moet berekenen naar graaddagen om zo de buiten variabele mee te nemen. Dat zal je denk ik een beter en eerlijker vergelijk geven.
Wikipedia: Graaddag

Acties:
  • +1 Henk 'm!

  • TheGhostInc
  • Registratie: November 2000
  • Niet online
Kleine tip:
Breek het op, dus maak een extra sensor/variabele die aangeeft of de thermostaat is 'versteld' en daarna een extra die aangeeft of de starttijd moet worden geüpdatet.
Dan weet je in welke stap de fout zit.

Acties:
  • +1 Henk 'm!

  • jmn77
  • Registratie: December 2024
  • Laatst online: 26-03 17:14
@The Fatal Daar heb ik ook al aan zitten denken: dat scheelt natuurlijk nogal. En of bijv. de wind pal op de voorgevel staat.
Daar ga ik sowieso ook even mee verder.

@TheGhostInc Oke, dus nog een soort tussenstap als debugger.

Ik ga er mee aan de slag, voor zover bedankt alvast.

Acties:
  • 0 Henk 'm!

  • jmn77
  • Registratie: December 2024
  • Laatst online: 26-03 17:14
Maar, lijkt de code technisch gezien, goed?

Acties:
  • 0 Henk 'm!

  • O085105116N
  • Registratie: November 2006
  • Laatst online: 14:46
Je kan ook eens kijken naar een afgeleide sensor die gebaseerd is op een thermometer in je woonkamer. Differentialsensor dacht ik, in homeassistant aanmaken is een standaard helper.

Acties:
  • 0 Henk 'm!

  • FredvZ
  • Registratie: Februari 2002
  • Laatst online: 11:58
Scheelt het niet een hoop tijd en gedoe om het af te lezen uit de grafiek van de temperatuursensor?

Spel en typfouten voorbehouden


Acties:
  • 0 Henk 'm!

  • jmn77
  • Registratie: December 2024
  • Laatst online: 26-03 17:14
@O085105116N Dank. Ga ik eens doen.
@FredvZ Ja, dat is ook zo. Ben ik al mee bezig geweest. O.a. met de Plotly Graph Card (via HACS). Kan idd met wat gedoe met uitlezen ook wel. Maar dit is wat makkelijker en preciezer.
Pagina: 1