Gå til innhold
  • Bli medlem
stigvi

Styring av varme på varmtvannstank

Anbefalte innlegg

Her er min løsning på dette med å styre oppvarming av vann.
Jeg har i alle fall lært en del av dette. Før jeg startet trodde jeg det ville være nok å måle temperatur i topp av tank, men ser den gir lite nyttig info. Jeg trodde temperaturen på vannet ville jevne seg ut når det var stillestående lenge nok, men ser at det motsatte er tilfellet. Stillestående vann leder varme dårlig og kaldt vann som kommer inn i bunn av tanken blir ikke varmet opp av det varme vannet i topp. Det kan fint være 30-40 grader forskjell på topp og bunn og dette opprettholdes over tid.
Jeg så også at temperatur i topp fortsatte å synke i opp til en time etter at varme var påslått og det var da jeg virkelig begynnte å lure. Virker ikke styringen min? Er det ikke strøm på varmeelementet?
Da monterte jeg en temperaturføler i bunn av tank og fikk et mye klarere bilde av hva som skjer.
1. Temperatur i topp på min tank synker 0,5 grader i timen uavhengig av vannforbruk (med normalt forbruk)
2. Temperatur i bunn synker raskt ned mot 35-45 grader selv med moderat forbruk
Konklusjon er at det er vanskelig å vite status på vanntemperatur ut fra en føler i topp og bunn. Men jeg er endt opp med å ta snittet av disse to.

Målet mitt var at vannet skal være ferdig oppvarmet til klokken 0400. Stort sett alltid er strøm billigst på natt og jeg har ingen annen kobling mot strømpris. Tanken tar 194 liter og det tar 404 sekund å varme den opp 1 grad. Med dette som utgangspunkt beregnes tidspunkt varmen må slås på for at det skal være varmt 0400. Strømmen slås av 0500. Denne ekstra timen er der i tilfelle tanken inneholder mer kaldt vann enn det jeg har antatt med å ta snitt av topp og bunn temperatur.

Styringen blir gjort av en Sonoff TH16, men strøm til tank går via en kontaktor. Pinglereleet i TH16 stoler jeg ikke på. Kontaktoren er ikke lydløs så det er et minus. Kunne byttet den ut, men fruen klager ikke over smell på vaskerommet enda.
På Sonoff har jeg lagt inn Esphome. Kode og bilder er nedenfor.

Et kjekt lite prosjekt som ikke har kostet allverdens 🙂



 

esphome:
  name: varmtvannstank
  platform: ESP8266
  board: esp01_1m

wifi:
  ssid: "HEIME5.ORG"
  password: !secret heime_wifi
  domain: .lan

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  #ap:
  #  ssid: "Varmtvannstank Fallback Hotspot"
  #  password: "okz8anWfZKFP"

#captive_portal:

# Enable logging
logger:

# Enable Home Assistant API
api:

ota:

globals:
  - id: heating
    type: bool
    restore_value: no
    initial_value: 'false'
  
  - id: seconds
    type: int
    restore_value: no
    initial_value: '0'

switch:
  - platform: gpio
    pin: 12
    id: varmtvannstank_varme
    name: "varmtvannstank_varme"
    restore_mode: ALWAYS_OFF

dallas:
  - pin: GPIO14

sensor:
  - platform: dallas
    address: 0xC5000008FABF3328
    id: varmtvannstank_topp_temperatur
    #name: "varmtvannstank_temperatur"
    filters:
    - sliding_window_moving_average:
        window_size: 5
        send_every: 5
  
  - platform: dallas
    address: 0xFA0319A2796AD628
    id: varmtvannstank_bunn_temperatur
    name: "varmtvannstank_bunn_temperatur"
    filters:
    - sliding_window_moving_average:
        window_size: 5
        send_every: 5
  
  - platform: template
    name: "Energibruk varmtvann"
    lambda: |-
      return id(seconds) / 1800.0;
    update_interval: 300s
    unit_of_measurement: "kWh"

interval:
  - interval: 5min
    then:
    - if:
        condition:
          - lambda: !lambda |-
              auto time_now = id(homeassistant_time).utcnow();
              auto time_heat_end = time_now;
              
              id(seconds) = (77.0 - (id(varmtvannstank_topp_temperatur).state + id(varmtvannstank_bunn_temperatur).state) / 2.0) * 404.30769;
              
              if(id(seconds) < 0)
                id(seconds) = 0;
              else if(id(seconds) > 28800)
                id(seconds) = 28800;
        
              time_heat_end.hour = 4;
              
              if(time_heat_end.is_dst)
              {
                ESP_LOGD("main", "dst is on");
                time_heat_end.hour = 3;
              }
              
              time_heat_end.minute = 0;
              time_heat_end.second = 0;
              time_heat_end.recalc_timestamp_utc();
              
              if(id(heating) == true && time_now < time_heat_end)
              {
                ESP_LOGD("main", "t1");
                return true;
              }
          
              if(time_now > time_heat_end)
                time_heat_end = esphome::time::ESPTime::from_epoch_utc(time_heat_end.timestamp + 86400);
            
              auto time_heat_start = esphome::time::ESPTime::from_epoch_utc(time_heat_end.timestamp - id(seconds) - 3600);
          
              ESP_LOGD("main", "seconds=%d", id(seconds));
              ESP_LOGD("main", "%d-%d-%d %d:%d:%d", time_heat_start.year, time_heat_start.month, time_heat_start.day_of_month, time_heat_start.hour, time_heat_start.minute, time_heat_start.second);

              if(id(heating) == false && time_now > time_heat_start)
              {
                ESP_LOGD("main", "t2");
                return true;
              }
              else
              {
                ESP_LOGD("main", "t3");
                return false;
              }
        then:
          - if:
              condition:
                - lambda: !lambda |-
                    if(id(heating) == false)
                    {
                      id(heating) = true;
                      
                      return true;
                    }
                    else
                      return false;
              then:
                - climate.control:
                    id: varmtvannstank
                    target_temperature_low: 79.0
                    target_temperature_high: 81.0
        else:
          - if:
              condition:
                - lambda: !lambda |-
                    if(id(heating) == true)
                    {
                      id(heating) = false;
                      
                      return true;
                    }
                    else
                      return false;
              then:
                - climate.control:
                    id: varmtvannstank
                    target_temperature_low: 60.0
                    target_temperature_high: 61.0

time:
  - platform: homeassistant
    id: homeassistant_time

climate:
  - platform: bang_bang
    id: varmtvannstank
    name: "varmtvannstank"
    sensor: varmtvannstank_topp_temperatur
    default_target_temperature_low: 60.0
    default_target_temperature_high: 61.0
    visual:
      min_temperature: 60.0
      max_temperature: 85.0
      temperature_step: 0.1

    heat_action:
      - switch.turn_on: varmtvannstank_varme
    idle_action:
      - switch.turn_off: varmtvannstank_varme



 

Merknad 2019-12-03 064201.jpg

Merknad 2019-12-03 064201b.jpg

20191127_175254.jpg

20191127_175340.jpg

  • Like 3

Del dette innlegget


Lenke til innlegg
Del på andre sider

Dropp i temperatur kl 0600 og 2230 skyldes bruk av dusj

Temperaturføler i topp står i kontakt med vannet i tankens hull for termometer. Føler i bunn ligger inntil utsiden der termostat er. I den fasen i oppvarmingen der disse to følger hverandre så er forskjellen mellom dem 0,2-0,3 grader. Virker som at det er helt greit å måle på utsiden.
Jeg startet prosjektet med å måle ved blandeventilen, men da ble det mye rare målinger, sannsynligvis fordi det også strømmer kaldt vann der. I ettertid ser jeg at jeg kunne klart meg med føler i bunn og kun beregnet topptemperatur.

Endret av stigvi

Del dette innlegget


Lenke til innlegg
Del på andre sider

Har kun føler i bunn, fungerer helt greitt til formålet.

Strømmen koster litt mer på morgenen og ettermiddag, kobler derfor ut kun i disse periodene.

Hvis temp faller under kritisk punkt kobles inn. (Opprettholde WAF).

 

Dette er enkelt og greitt, kanskje ikke helt optimalt, men tviler på om det er nevenverdig mer å spare,

men kan jo være mer spennende....

Del dette innlegget


Lenke til innlegg
Del på andre sider

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gjest
Skriv svar til emnet...

×   Du har limt inn tekst med formatering.   Fjern formatering

  Du kan kun bruke opp til 75 smilefjes.

×   Lenken din har blitt bygget inn på siden automatisk.   Vis som en ordinær lenke i stedet

×   Tidligere tekst har blitt gjenopprettet.   Tøm tekstverktøy

×   Du kan ikke lime inn bilder direkte. Last opp eller legg inn bilder fra URL.


×
×
  • Opprett ny...