Jump to content

Mitt forsøk på "Prediktiv reduksjon av strømbruk"


hjemmedude
 Share

Recommended Posts

"Under 9" er for lite konkret. Er det under 6 også?

stigvi skrev (2 minutter siden):

"Under 9" er for lite konkret. Er det under 6 også?

Nedre grense er gjerne styrt av bilen.

Link to comment
Share on other sites

Ja, alt under 9. 5 er typisk absolutt nedre grense
 

hvis det er bilrelatert, noe jeg i utgangspunktet ikke tror, så har dette vært testet på Tesla 

Edited by Kim123
Link to comment
Share on other sites

Jeg har en VW Passat GTE og en VW e-Golf og begge går ned til 6A. Velger jeg bare en fase så ender de opp med 1,4kW ladeeffekt. Begge bilene har en Easee ladeboks og disse deler en 16A / 400V kurs. Jeg har dermed 11kW tilgjengelig, men har ikke fått til å lade med den effekten. Passat topper ut på 3,6kW og e-Golf på 7,2kW, men dessverre vil ikke Easee boksene koble bilene på hver sine faser. En fase står ubrukt og en fase deles mellom bilene. Men siden det er uaktuelt å trekke 11kW pga nettleien så gidder jeg ikke styre mer med det. Jeg trodde derimot at Easee boksene kunne koble om fasene slik at det ble jevnt fordelt, men mulig jeg har drømt det.

Link to comment
Share on other sites

Jeg har 230v 3fas 32A og har til nå ladet på de billigste timene om natten gjerne kun et par timer på 11kW, men nå blir det uaktuelt. 
 

det kan være jeg må legge den om til 1-fas for å kunne gå ned på ladefarten

Link to comment
Share on other sites

13 minutes ago, Kim123 said:

Jeg har 230v 3fas 32A og har til nå ladet på de billigste timene om natten gjerne kun et par timer på 11kW, men nå blir det uaktuelt. 
 

det kan være jeg må legge den om til 1-fas for å kunne gå ned på ladefarten

Hvor langt ned vil du gå? Mitt regnestykke tilsier at jeg ville betalt 140kr mer for strømmen i juni ved å lade på 10A sammenlignet med 32A. Jeg ville nok ikke ladet på 11kW, men kanskje et sted rundt 5-6kW. Dersom du trenger elektriker for å legge om til 1-fas, så tviler jeg på at det vil lønne seg.

Edited by OlavT
Link to comment
Share on other sites

Jeg har ikke regnet noe på det. Tviler på jeg noen gang klarer å ligge under 2kW trinnet, så kommer nok til å ligge meg på 5kW. For å endre 3-1 fas i easee gjøres bare i interfacet

Link to comment
Share on other sites

3 minutes ago, Kim123 said:

Jeg har ikke regnet noe på det. Tviler på jeg noen gang klarer å ligge under 2kW trinnet, så kommer nok til å ligge meg på 5kW. For å endre 3-1 fas i easee gjøres bare i interfacet

For å ligge under 5kW så må jo elbil laderen settes et godt stykke under dette om du også ønsker å varme vann eller om det er noe annet på samtidig. Da må kanskje laderen under 3kW og da går det smått med ladingen (som kansje er ok for bruken, men som straffer seg på strømprisene).

Link to comment
Share on other sites

Kim123 skrev (1 time siden):

For å endre 3-1 fas i easee gjøres bare i interfacet

Eller bruke en 1-fase ladeledning, men som du nevner - å styre det fra easee er gratis og enkelt. Å bruke en 1-fase ladeledning er et alternativ for de som ikke har ladeboks på veggen som kan styres.

OlavT skrev (1 time siden):

For å ligge under 5kW så må jo elbil laderen settes et godt stykke under dette om du også ønsker å varme vann eller om det er noe annet på samtidig. Da må kanskje laderen under 3kW og da går det smått med ladingen (som kansje er ok for bruken, men som straffer seg på strømprisene).

Det er bedre med en fugl i handa enn ti på taket, er det noe som heter. Du vet du kan spare nettleien, men du vet lite om hvordan strømprisen varierer i måneden som kommer. Jeg vil jo tro at disse ekstreme prisene vi har nå er kun midlertidig. Når det blir mer normalt så vil du neppe kunne spare 140 kroner i måneden.

Edited by stigvi
Link to comment
Share on other sites

Hei igjen,

 

da er heavy duty til vvb installert og integrert mot HA. Schedy tar seg av oppvarming ukedager fra kl 22 til 06, helgene kjører den på minus frokost og middagstider. Har ikke fått pid integrert mot schedy ennå, men tenkte følge haraldov sin kodesnutt.

 

Skulle gjerne hatt en delay på 5 minutter slik som stigvi har, schedy har kanskje en mulighet for det.

Link to comment
Share on other sites

Ikke dumt, jeg baserer meg kun på de billigste timene. 
 

Jeg har 3 valg jeg kan sette, antall timer på fra 00-08, fra 08-00, samt antall timer billigste pris. 
 

har satt den til 2 timer oppvarming på natt (00-08), samt 4 timer på billigste pris. Da får jeg minst 4 timer oppvarming på berederen hver dag, på de 4 billigste timene. 
 

fungerer utmerket for familie på 2+2, samt en funksjon som passer på legionella. Full oppvarming skal skje minst hver 3. dag, men stort sett så blir den oppvarmet hver dag. 

Link to comment
Share on other sites

14 hours ago, hjemmedude said:

Skulle gjerne hatt en delay på 5 minutter slik som stigvi har, schedy har kanskje en mulighet for det.

 

Har ikke prøvd det selv, men du kan jo lage en script entitet du kan bruke i schedy configurasjonen. 

 

I Scripts lag en automasjon for å slå på varmtvannsberederen. Den får en egen entitet som heter script.varmtvannsbereder_sla_pa_med_5_minutters_delay

alias: 'Varmtvannsbereder: Slå på med 5 minutters delay'
sequence:
  - service: switch.turn_on
    data: {}
    target:
      entity_id: switch.bryter_varmvannsbereder
  - delay:
      hours: 0
      minutes: 5
      seconds: 0
      milliseconds: 0
mode: single

 

Lag så en automasjon for å slå av varmtvannsberederen. Den får en egen entitet som heter script.varmtvannsbereder_sla_av_varmtvannsbereder_og_vent_5_minutter

alias: 'Varmtvannsbereder: Slå av varmtvannsbereder og vent 5 minutter'
sequence:
  - service: switch.turn_off
    data: {}
    target:
      entity_id: switch.bryter_varmvannsbereder
  - delay:
      hours: 0
      minutes: 5
      seconds: 0
      milliseconds: 0
mode: single

 

Jeg bruker ikke schedy lengre, men lagde denne konfigurasjonen før jeg tok i bruk HA automasjoner:

schedy_heating_vvb:  # This is our app instance name.
  module: hass_apps_loader
  class: SchedyApp
  
  actor_type: switch
  
  watched_entities:
  - "binary_sensor.dyr_strom"
  - "sensor.energy_regulator_usage_step"

  rooms:
    varmtvannsbereder:
      actors:
        switch.bryter_varmvannsbereder:
      schedule:
      - v: "on"
        rules:
        - rules:
        - x: "Break() if (state('sensor.energy_regulator_usage_step')) < 4 else Next()"
        - x: "Break() if is_on('binary_sensor.dyr_strom') else Next()"
        - rules:
        - { start: "11:00", end: "15:00" }
        - { start: "18:00", end: "21:00" }
        - { start: "00:00", end: "06:00" }
      - v: "off"

 

 

 

 

Link to comment
Share on other sites

Tenkte jeg skulle skrive om hvordan jeg nå gjør varmestyring med bayesian sensor som @stigvi har dokumentert veldig godt. Se her: https://www.hjemmeautomasjon.no/forums/topic/5931-varmestyring-med-bayesian-sensor/

 

Jeg har forenklet endel oppsettet hans til mitt bruk. Her er mine bayesian binære sensorer. Jeg har brukt stigvi sine sannsynligheter, men ved hjelp et regneark kan du simulere ulike sannsynligheter. Jeg brukte regnearket som ligger vedlagt denne posten: https://community.home-assistant.io/t/bayesian-sensors-best-methods/142401

Har også sett denne Youtube videoen for å lære om bayesian sensorer: https://www.youtube.com/watch?v=oDWQCJbBrKE&t=13s

 

 

binary_sensor:
  - platform: bayesian
    name: 'Varmekabler stue'
    prior: 0.35
    probability_threshold: 0.5
    observations:
      - platform: 'numeric_state'
        entity_id: 'sensor.regulator_energy_usage'
        prob_given_true: 0.001
        below: 32
      - entity_id: 'input_boolean.ferie'
        prob_given_true: 0.001
        platform: 'state'
        to_state: 'on'
      - entity_id: 'binary_sensor.noen_er_hjemme'
        prob_given_true: 0.7
        platform: 'state'
        to_state: 'on'
      - entity_id: 'input_boolean.sleeptime'
        prob_given_true: 0.32
        platform: 'state'
        to_state: 'on'
      - entity_id: 'binary_sensor.natt'
        prob_given_true: 0.32
        platform: 'state'
        to_state: 'on'
      - entity_id: 'sensor.prisniva'
        prob_given_true: 0.4
        platform: 'state'
        to_state: 'EXPENSIVE'
      - entity_id: 'sensor.prisniva'
        prob_given_true: 0.3
        platform: 'state'
        to_state: 'VERY_EXPENSIVE'
      - entity_id: 'sensor.prisniva'
        prob_given_true: 0.3
        platform: 'state'
        to_state: 'EXTREMELY_EXPENSIVE'
        
  - platform: bayesian
    name: 'Varmekabler bad og gang'
    prior: 0.35
    probability_threshold: 0.5
    observations:
      - platform: 'numeric_state'
        entity_id: 'sensor.regulator_energy_usage'
        prob_given_true: 0.001
        below: 32
      - entity_id: 'input_boolean.ferie'
        prob_given_true: 0.001
        platform: 'state'
        to_state: 'on'
      - entity_id: 'binary_sensor.noen_er_hjemme'
        prob_given_true: 0.7
        platform: 'state'
        to_state: 'on'
      - entity_id: 'input_boolean.sleeptime'
        prob_given_true: 0.32
        platform: 'state'
        to_state: 'on'
      - entity_id: 'binary_sensor.natt'
        prob_given_true: 0.32
        platform: 'state'
        to_state: 'on'
      - entity_id: 'sensor.prisniva'
        prob_given_true: 0.4
        platform: 'state'
        to_state: 'EXPENSIVE'
      - entity_id: 'sensor.prisniva'
        prob_given_true: 0.3
        platform: 'state'
        to_state: 'VERY_EXPENSIVE'
      - entity_id: 'sensor.prisniva'
        prob_given_true: 0.3
        platform: 'state'
        to_state: 'EXTREMELY_EXPENSIVE'
        
  - platform: bayesian
    name: 'Varmtvannsbereder'
    prior: 0.35
    probability_threshold: 0.5
    observations:
      - entity_id: 'binary_sensor.natt'
        prob_given_true: 0.7
        platform: 'state'
        to_state: 'on'
      - entity_id: 'binary_sensor.soltimer'
        prob_given_true: 0.7
        platform: 'state'
        to_state: 'on'
      - platform: 'numeric_state'
        entity_id: 'sensor.regulator_energy_usage'
        prob_given_true: 0.001
        below: 32
      - entity_id: 'sensor.prisniva'
        prob_given_true: 0.4
        platform: 'state'
        to_state: 'EXPENSIVE'
      - entity_id: 'sensor.prisniva'
        prob_given_true: 0.3
        platform: 'state'
        to_state: 'VERY_EXPENSIVE'
      - entity_id: 'sensor.prisniva'
        prob_given_true: 0.3
        platform: 'state'
        to_state: 'EXTREMELY_EXPENSIVE'
        
  - platform: bayesian
    name: 'Varmepumpe'
    prior: 0.35
    probability_threshold: 0.5
    observations:
      - entity_id: 'binary_sensor.natt'
        prob_given_true: 0.7
        platform: 'state'
        to_state: 'on'
      - entity_id: 'binary_sensor.soltimer'
        prob_given_true: 0.7
        platform: 'state'
        to_state: 'on'
      - platform: 'numeric_state'
        entity_id: 'sensor.regulator_energy_usage'
        prob_given_true: 0.001
        below: 32
      - entity_id: 'sensor.prisniva'
        prob_given_true: 0.4
        platform: 'state'
        to_state: 'EXPENSIVE'
      - entity_id: 'sensor.prisniva'
        prob_given_true: 0.3
        platform: 'state'
        to_state: 'VERY_EXPENSIVE'
      - entity_id: 'sensor.prisniva'
        prob_given_true: 0.3
        platform: 'state'
        to_state: 'EXTREMELY_EXPENSIVE'

 

 

 

Har så opprettet template sensorer så tar ut sannsynligheten:

      - name: "Varmekabel sannsynlighet stue"
        state: "{{ state_attr('binary_sensor.varmekabler_stue', 'probability') }}"
        
      - name: "Varmekabel sannsynlighet bad og gang"
        state: "{{ state_attr('binary_sensor.varmekabler_bad_og_gang', 'probability') }}"
        
      - name: "Varmtvannsbereder sannsynlighet"
        state: "{{ state_attr('binary_sensor.varmtvannsbereder', 'probability') }}"

      - name: "Varmepumpe sannsynlighet"
        state: "{{ state_attr('binary_sensor.varmepumpe', 'probability') }}"

 

Automasjon for å slå på varmtvannsbereder:

alias: ' Bayesian varmestyring varmtvannsbereder: Varmtvannsbereder slåes på'
description: >-
  Bayesian sensor slår på varmtvannsbereder når klokken er 22:00-06:00 og
  11:00-15:00
trigger:
  - platform: numeric_state
    entity_id: sensor.varmtvannsbereder_sannsynlighet
    for:
      hours: 0
      minutes: 0
      seconds: 20
    above: '0.5'
condition:
  - condition: state
    entity_id: switch.bryter_varmvannsbereder
    state: 'off'
action:
  - service: switch.turn_on
    data: {}
    target:
      entity_id: switch.bryter_varmvannsbereder
  - delay:
      hours: 0
      minutes: 5
      seconds: 0
      milliseconds: 0
mode: single

 

Automasjon for å slå av varmtvannsbereder:

alias: ' Bayesian varmestyring varmtvannsbereder: Varmtvannsbereder slåes av'
description: Bayesian sensor slår av varmtvannsbereder
trigger:
  - platform: numeric_state
    entity_id: sensor.varmtvannsbereder_sannsynlighet
    for:
      hours: 0
      minutes: 0
      seconds: 20
    below: '0.5'
condition:
  - condition: state
    entity_id: switch.bryter_varmvannsbereder
    state: 'on'
action:
  - service: switch.turn_off
    data: {}
    target:
      entity_id: switch.bryter_varmvannsbereder
  - delay:
      hours: 0
      minutes: 5
      seconds: 0
      milliseconds: 0
mode: single

 

 

Bayesian sensor reagerer umiddelbart når PID regulatoren går under 100 %. Når sannsynligheten går under 0.5 så endres den binære sensorer fra on til off. Når den går over 0.5 så endres den fra off til on. 

 

image.thumb.png.c5548d3ddcd36c7560a7e14b1f54d07a.png

 

 

  • Like 2
Link to comment
Share on other sites

haraldov skrev (6 timer siden):

Tenkte jeg skulle skrive om hvordan jeg nå gjør varmestyring med bayesian sensor som @stigvi har dokumentert veldig godt.

Problemet er at det er spredd utover. De siste dagene har jeg tenkt at noe må gjøres - få laget en oppskrift som er lettere tilgjengelig.

  • Like 1
  • Thanks 2
Link to comment
Share on other sites

Tenkte jeg skulle poste min variant av @stigvisin PID-kontroller for mangfoldets skyld.

 

I korte trekk har jeg en skrevet en klasse som jeg har i /pyscript/modules som ivaretar alt av terskelverdier for av/på og timere.

 

Opplever i blant at PID-regulatoren er litt vel trigger-happy i begynnelsen av timen siden timeestimatet er veldig følsomt for (filtrert) sanntidseffekt etter timeskift, så for laster som jeg ikke vil skru av og på så ofte venter jeg til slutten av timen (f.eks. minutt 40), og har timeout til timen er omme.

 

from datetime import datetime

registered_triggers = []

class Device():
    def __init__(self, threshold, state_entity, timer_entity, timeout, earliest_shutoff = 0):
        self.state_entity = state_entity
        self.timer_entity = timer_entity
        self.timeout = timeout                      # Timeout in seconds. If -1, timeout until next hour
        self.earliest_shutoff = earliest_shutoff    # Minute of earliest shutoff
        
        state.setattr(f"{self.state_entity}.threshold", threshold)
        state.setattr(f"{self.state_entity}.timeout", timeout)
        state.setattr(f"{self.state_entity}.earliest_shutoff", earliest_shutoff)

        @state_trigger(f"{self.timer_entity}")
        def check_timer(value = None):
            '''Turn back on when timer elapsed after upcrossing threshold'''
            thr = state.getattr(self.state_entity)["threshold"]
            s = state.get(self.state_entity)
            t = state.get(self.timer_entity)
            c = float(pyscript.regulator_electric_power)
            
            if c > thr and t == 'idle' and s == 'off':
                self.turn_on()
    
        registered_triggers.append(check_timer)
        
    def turn_on(self):
        state.set(self.state_entity, "on")
    
    def turn_off(self):
        state.set(self.state_entity, "off")

    def check_threshold(self):
        thr = state.getattr(self.state_entity)["threshold"]
        s = state.get(self.state_entity)
        c = float(pyscript.regulator_electric_power)
        t = state.get(self.timer_entity)

        # Turn device off
        if c <= thr and s == 'on' and self.check_earliest_shutoff():
            self.turn_off()
            if self.timeout != 0:
                self.start_timer()
               
        # Turn device back on if above threshold and timer elapsed
        if c > thr and t == 'idle' and s == 'off':
            self.turn_on()
                
    def start_timer(self):
        t = self.timeout
        if t == -1:   # Timeout rest of hour
            t = self.calculate_timeout_until_next_hour() 
        timer.start(entity_id = self.timer_entity, duration = t)
       
    def check_earliest_shutoff(self):
        '''Check if minute count is high enough to turn off device'''
        m = datetime.now().minute
        return m >= self.earliest_shutoff
        
    def calculate_timeout_until_next_hour(self):
        '''For devices with timeout == -1'''
        now = datetime.now()
        m, s = now. minute, now.second
        return 3600 - (m*60+s)

 

Så har jeg et python-script der jeg instansierer Device-objektene og oppdaterer regulatoren. Klipper ned litt her for å unngå unødvendig repetisjon:

# [...Setup of simple_pid...]

laundry = Device(threshold = 0.9, state_entity="pyscript.laundry_floor_pid_output", timer_entity="timer.laundry_floor_timer", timeout = 5*60) 
# [...repeat for other devices...]

@state_trigger("pyscript.electricity_estimated_hour_consumption")
def update_regulator():
    global pid
    global laundry, toilet, bath, entrance, dehumidifier, water_heater

    last_c = float(pyscript.regulator_electric_power)
    c = pid(float(pyscript.electricity_estimated_hour_consumption))

    if round(c, 2) != last_c:
        pyscript.regulator_electric_power.old = last_c
        pyscript.regulator_electric_power = round(c, 2)
        
    laundry.check_threshold()
    # [...repeat for other devices...]
        

 

Dessverre støtter ikke Pyscript @state_trigger inni en klasse ennå såvidt jeg vet, så @state_trigger(laundry.timer_entity) må dessverre gjentas for hver timer utenfor klassen som vist over.

 

"Outputen" fra alt dette er egentlig state_entity (altså pyscript.laundry_floor_pid_output), som jeg bruker der jeg ivaretar andre betingelser for av/på (basert på strømpris osv.)

Edited by RVM
Flyttet state_triggers for timere inn i Device
  • Like 1
Link to comment
Share on other sites

RVM skrev (39 minutter siden):

Dessverre støtter ikke Pyscript @state_trigger inni en klasse ennå såvidt jeg vet

 

Kan du gjøre noe tilsvarende dette?

 

registered_triggers = []
factory_apps = []

@time_trigger('startup')
def heating_startup():
    for app in pyscript.app_config:
        factory_apps.append(ClassComfortTemperature(app))

class ClassComfortTemperature:
    def __init__(self, config):
        self.cfg = config

        @state_trigger(f"{self.cfg['input']}", state_hold=self.cfg['delay'])
        def new_status(value=None):
            task.unique(f"comforttempe_{self.cfg['input']}")

            tl = float(state.get(f"{self.cfg['output']}.target_temp_low"))
            th = float(state.get(f"{self.cfg['output']}.target_temp_high"))
            if value == "off":
                climate.set_temperature(entity_id = self.cfg['output'], target_temp_high = int(th - float(self.cfg['temperature'])), target_temp_low = int(tl))
                log.info('Setter ned temperatur')
            else:
                climate.set_temperature(entity_id = self.cfg['output'], target_temp_high = int(th + float(self.cfg['temperature'])), target_temp_low = int(tl))
                log.info('Setter opp temperatur')
    
        registered_triggers.append(new_status)

 

Reference — hacs-pyscript 1.3.3 documentation

Link to comment
Share on other sites

stigvi skrev (10 minutter siden):

 

Kan du gjøre noe tilsvarende dette?

 

Aha, det hadde jeg ikke fanga opp, så ingenting om det i dokumentasjon. Skal prøve seinere :)

 

Edit: Fant det nå...

Edited by RVM
Link to comment
Share on other sites

@haraldov takk for innspill både på schedy og bayesian. Skjønner litt mer etter videoen. Har lyst å prøve dette. Antar bayesian var grunnen til at du droppet schedy.

 

Har noen spørsmål allerede..

1 Hvorfor brukes input_boolean.ferie bare for varmekabler gang/bad/stue og ikke varmepumpe?
2 Må jeg ha en binary_sensor_noen_er_hjemme? Har ikke noen gode deteksjonmetoder per nå.

3 Hvorfor er sensor.regulator_energy_usage og ferie prob_given_true ("sannsynlighet for sann") satt så lavt, 0.001?

Svar fra stigvi under, tok det med om andre skulle lure på det samme..

Sitat

Jeg starter med å si at normal tilstand er 35% som betyr økonomimodus på varmekildene. På en bayesisk sensor er det slik at innganger som bidrar med mer enn 50% gjør at sannsynligheten for på/hjemme/sann/varme/osv går opp. Innganger som bidrar med mindre enn 50% gjør at den totale sannsynligheten går ned. Så når jeg har en bryter som sier jeg er på ferie og setter sannsynligheten til 0.001 så går sannsynligheten for at jeg ønsker varme så kraftig ned at ingen andre innganger klarer å få den over 10% som var grensen for bortemodus.
 

 

4 Du sier vvb er aktiv 22:00 til 06:00 men jeg ser ingen steder i koden din hvor det skjer, er det mer bak automasjonen? Det er vel i automasjonen du drar inn klokkeslett og ikke i bayesian koden?

 

5 binary_sensor.natt og soltimer finner jeg sikkert om jeg søker på forumet her, er ikke å finne i "varmestyring med bayesian sensor"

 

Tror jeg begynner med en veldig enkel for vvb uten strømpriser ala dette, en template sensor og automasjonene dine 🙂

 

  - platform: bayesian
    name: 'Varmtvannsbereder'
    prior: 0.35
    probability_threshold: 0.5
    observations:
      - entity_id: 'binary_sensor.natt'
        prob_given_true: 0.7
        platform: 'state'
        to_state: 'on'
      - entity_id: 'binary_sensor.soltimer'
        prob_given_true: 0.7
        platform: 'state'
        to_state: 'on'
      - platform: 'numeric_state'
        entity_id: 'sensor.regulator_energy_usage'
        prob_given_true: 0.001
        below: 32

 

 

 

  • Like 1
Link to comment
Share on other sites

On 15/07/2022 at 10:50, hjemmedude said:

1 Hvorfor brukes input_boolean.ferie bare for varmekabler gang/bad/stue og ikke varmepumpe?

 

Jeg skal svare på alle dine spørsmål, men deler opp svarene i flere innlegg.

Spm. 1: Det er bare en forglemmelse. Skal legge den til varmepumpe konfigurasjonen, men har prioritert å få til de binære sensorene for bayesian varmestyring først. 

 

On 15/07/2022 at 10:50, hjemmedude said:

2 Må jeg ha en binary_sensor_noen_er_hjemme? Har ikke noen gode deteksjonmetoder per nå.

 

Den er fin å ha. I begynnelsen hadde jeg automatiseringer av tidspunkter hvor jeg slå av og på varmekabler og varmepumpe. F.eks. så hadde jeg fra klokken 06:30 - 08:00 (morgen) og 15:00 - 22:30 (ettermiddag/kveld) på hverdager at varmekablene skulle varme opp til 21 grader og varmepumpe til 23 grader. Mellom 08:00-15:00 og 22:30-06:30 så senket jeg temperatur på varmekablene og varmepumpe. Dette er vanlig strategi å bruke når en automatiserer varmestyring. 

 

En annen måte å gjøre varmestyring på er å bruke er "noen hjemme" strategi (presence detection) https://www.home-assistant.io/getting-started/presence-detection/. Du trenger da å opprette en binary_sensor_noen_er_hjemme som er av når ingen er hjemme og på når en eller flere er hjemme. Så når alle er borte så senkes varmen og når en eller flere er hjemme så økes varmen ved hjelp av den binære bayesian sensoren som du har opprettet. Så oppsummert vil binary_sensor.varmekabler_stue og binary_sensor.varmepumpe være on når noen er hjemme og off når alle er bortreist eller er på jobb.

 

Jeg bruker to måter å detektere at jeg er hjemme på. Den første er å bruke Home Assistant appen på min mobil. Du må da sette opp HA sensorene til å følge deg https://companion.home-assistant.io/docs/core/location

Den andre måten jeg bruker er å spørre min Asus gw ruter om jeg er connected eller ikke https://www.home-assistant.io/integrations/asuswrt/. Flere Youtube videoer om dette. Se her f.eks. https://www.youtube.com/watch?v=J-b8BAefNGQ eller https://www.youtube.com/watch?v=Lu0hunynWJY

 

 

template:
  - binary_sensor:
      - name: "Noen er hjemme"
        state: >
          {{ is_state('device_tracker.harald_mobil', 'home') # Home Assistant companion app på min Android mobil
              or is_state('device_tracker.7e_93_16_66_ca_45', 'home') # Er min mobil connected på min Asus ruter 
              or is_state('device_tracker.3e_01_bb_52_45_69', 'home')
              or is_state('device_tracker.ec_8c_9a_94_a4_56', 'home')
              or is_state('device_tracker.d8_9b_3b_6c_20_52', 'home') }}

 

Edited by haraldov
  • Like 2
Link to comment
Share on other sites

Dette blir et sidespor, men skit au. "Noen er hjemme" kan også være en bayesian sensor. Her er min som et eksempel på at det går å detektere annet enn kun mobil. Bevegelse i huset, om TV er påslått og co2 nivå er noe jeg bruker i tillegg til telefon.

 

binary_sensor:
    - platform: bayesian
      name: 'Noen er hjemme'
      prior: 0.73
      probability_threshold: 0.95
      device_class: presence
      observations:
        - entity_id: device_tracker.bluetooth_it
          prob_given_true: 0.71
          platform: 'state'
          to_state: 'home'
        - entity_id: device_tracker.sm_g930f
          prob_given_true: 0.8
          platform: 'state'
          to_state: 'home'
        - entity_id: sensor.sm_g930f_wifi_connection
          prob_given_true: 0.8
          platform: 'state'
          to_state: 'HEIME5.ORG'
        - entity_id: device_tracker.bluetooth_svh
          prob_given_true: 0.71
          platform: 'state'
          to_state: 'home'
        - entity_id: device_tracker.sm_g715fn
          prob_given_true: 0.8
          platform: 'state'
          to_state: 'home'
        - entity_id: sensor.sm_g715fn_wifi_connection
          prob_given_true: 0.8
          platform: 'state'
          to_state: 'HEIME5.ORG'
        - entity_id: device_tracker.tv
          prob_given_true: 0.7
          platform: 'state'
          to_state: 'home'
        - entity_id: input_boolean.travel_enabled
          prob_given_true: 0.001
          platform: 'state'
          to_state: 'on'
        - prob_given_true: 0.3
          platform: 'template'
          value_template: "{{states('binary_sensor.worktime') == 'on' and states('input_boolean.home_office') == 'off'}}"
        - entity_id: input_boolean.sleeptime
          prob_given_true: 0.7
          platform: 'state'
          to_state: 'on'
        - entity_id: input_select.phone_status
          prob_given_true: 0.994
          platform: 'state'
          to_state: 'Glemt borte'
        - entity_id: input_select.phone_status
          prob_given_true: 0.0061
          platform: 'state'
          to_state: 'Glemt hjemme'
        - entity_id: sensor.soverom_co2_value
          platform: 'numeric_state'
          prob_given_true: 0.8
          above: 600
        - entity_id: sensor.tvstue_co2_value
          platform: 'numeric_state'
          prob_given_true: 0.8
          above: 600
        - entity_id: sensor.airthings_stue_co2
          platform: 'numeric_state'
          prob_given_true: 0.8
          above: 600
        - entity_id: timer.activity
          prob_given_true: 0.9
          platform: 'state'
          to_state: 'active'

 

  • Like 1
Link to comment
Share on other sites

On 15/07/2022 at 10:50, hjemmedude said:

3 Hvorfor er sensor.regulator_energy_usage og ferie prob_given_true ("sannsynlighet for sann") satt så lavt, 0.001?

 

Litt teori:

I sannsynlighet skal verdien P være mellom 0 og 1. Finner vi sannsynligheten for at en hendelse er sann (P(sann)), så kan vi finne sannsynligheten for at hendelsen ikke er sann ved å regne: Hendelse er usann = 1 - P(hendelse er sann). 

 

Begge disse sensorene har en veldig liten sannsynlighet for at de er sann på 0.001 (dvs 0.001 * 100% = 0.1 % sannsynlighet). Vi har en terskelverdi ( probability_threshold) på 0.5 (50 %). Så hvis du er hjemme (binær sensor er on) vil vi få en sannsylighet på over 50 % (0.56) og den bayiske sensor vil også være on. Når en eller begge av disse sensorene er on vil de trekke ned sannsynligheten til under 50 % av bayiske sensor vil bli off.

 

Vedlagt ligger et regneark som Youtuber som jeg la ut lenke til brukte. Legg merke til at jeg legger inn innganger (Entititet ID) med minst sannsynlighet først og de med størst sannsynlighet sist. Prob_given_false er regnet ut som beskrevet ovenfor altså 1 - P(hendelse er sann). 

 

Det som er utfordringen er å finne ut sannsynlighetene for hendelsene. Dette regnearket kan simulere før en opprettet entitetene. 

 

image.thumb.png.2e17ff286c6534b2085a919e8ea5ca52.png

BayesianVK .xlsx

 

 

On 15/07/2022 at 10:50, hjemmedude said:

4 Du sier vvb er aktiv 22:00 til 06:00 men jeg ser ingen steder i koden din hvor det skjer, er det mer bak automasjonen? Det er vel i automasjonen du drar inn klokkeslett og ikke i bayesian koden?

 

Stemmer det. Jeg har opprettet en tod sensor https://www.home-assistant.io/integrations/tod/ som heter bare natt. Jeg skulle ha døpt den om til vvb_natt istedenfor. Jeg har nå endret tidspunkt igjen fra 22:00 - 01:30 på grunn av ny nettleie.

      - entity_id: 'binary_sensor.natt'
        prob_given_true: 0.7
        platform: 'state'
        to_state: 'on'

 

image.png.085939643b97c8e51333f8321c53675d.png

Edited by haraldov
  • Like 1
Link to comment
Share on other sites

On 15/07/2022 at 10:50, hjemmedude said:

5 binary_sensor.natt og soltimer finner jeg sikkert om jeg søker på forumet her, er ikke å finne i "varmestyring med bayesian sensor"

 

Jeg har solceller på huset. Tanken med binary_sensor.soltimer var at jeg skulle ha en sensor som var on når solcellene produserte over 1000 W og av ellers https://www.home-assistant.io/integrations/forecast_solar/. Har ikke begynt på dette ennå så jeg lagde en tod sensor med navn binary_sensor.soltimer i mellomtiden som er on mellom 11:00 - 15:00.

 

Her er regnearket du kan bruke på vvb oppsettet ditt.

image.png.8319b623469f919eec0ba84d08b6ef9f.png

VVB.xlsx

Edited by haraldov
  • Like 1
Link to comment
Share on other sites

On 18/07/2022 at 13:55, haraldov said:

Tanken med binary_sensor.soltimer var at jeg skulle ha en sensor som var on når solcellene produserte over 1000 W og av ellers

 

Har nå byttet ut "binary_sensor.soltimer" (start-slutt tid) med threshold sensor (https://www.home-assistant.io/integrations/threshold/) med navn "binary_sensor.solceller_produserer_over_1500_watt". Denne vil være on når solcellene produserer over 1500 Watt og off ellers. I oppsettet i bayesian sensor "Varmtvannsbereder" er det bare entitetnavnet som er byttet ut. Har ikke endret på sannsynlighet.

 

image.png.042cd90fd12bbcf48f960a361bc894c9.png

 

image.png.0ccecddd99d17e4b972c5e52d3dc7005.png

Edited by haraldov
  • Like 1
Link to comment
Share on other sites

  • 1 month later...

Takk for gode svar! 
Har ikke hatt tid til følge opp, og det er veldig synd. 
Bruker schedy og har 5 nivå for å slå av forbrukere. Det har virket fint frem til jeg fikk elbil-lader. 
Nå ser jeg at ved kontinuerlig last på 16A så hopper det mye mellom nivå 3 og 4.

Det kan jeg nok ordne med flere forbrukere over flere nivåer. 
Har ikke kommet videre med 5 minutters stand-by for ny verdi til termostat heller, men ser i tråden at jeg fikk tips om automasjon med delay. Dersom schedy kan trigge det? 
 

Link to comment
Share on other sites

Quote

Har ikke kommet videre med 5 minutters stand-by for ny verdi til termostat heller, men ser i tråden at jeg fikk tips om automasjon med delay. Dersom schedy kan trigge det? 

 

Dette er uprøvd av meg, men du kan jo lage en template for hver termostat climate entitet hvor du har en 5 minutter delay før temperatur endres.

Se her for hvordan dette gjøres med en switch entitet.

https://community.home-assistant.io/t/heaty-will-die-schedy-be-born/71276/1286?u=haraldov

 

Edited by haraldov
Link to comment
Share on other sites

Join the conversation

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

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...