Gå til innhold
  • Bli medlem
Støtt hjemmeautomasjon.no!

Anbefalte innlegg

Skrevet (endret)

Takk for svar @stigvi. Beklager spørsmål som sikkert er rare, men jeg finner ikke disse sensorene noen plass etterpå. Jeg ser dere får dem opp i visning i lovelace kort, det får ikke jeg siden de ikke finnes. 

 

from simple_pid import PID

pid = PID(40.0, 0.4, 2500.0, setpoint=float(input_select.nettleie_pristrinn) - 0.2)
pid.set_auto_mode(False)
pid.sample_time = 1.9
pid.output_limits = (0, 100)
pid.proportional_on_measurement = False
pid.set_auto_mode(True, last_output=100.0)
last_c = 100.0
turned_off_all = False
turned_off_car_red = False
turned_off_car_blue = False

@state_trigger("sensor.aidon_active_power_import")
def new_state():
    global pid
    global last_c
    global turned_off_all
    global turned_off_car_red
    global turned_off_car_blue
    
    c = (0.9 * last_c) + (0.1 * pid(float(sensor.estimated_fast_hourly_consumption_filtered)))
    #p, i, d = pid.components
    #state.set("sensor.regulator_p", round(p,1))
    #state.set("sensor.regulator_i", round(i,1))
    #state.set("sensor.regulator_d", round(d,1))
    
    if round(last_c, 0) != round(c, 0):
        sensor.regulator_energy_usage = round(c, 0)
        
        v = max(5 * round(c, 0) - 400, 0.0)
        number.effekt_varmtvannsbereder.set_value(round(v,1))

    last_c = c

    if c < 10 and turned_off_car_red == False:
        easee.set_charger_dynamic_limit(charger_id = "EH32498", current = "0")
        turned_off_car_red = True

    if c > 12 and turned_off_car_red == True:
        easee.set_charger_dynamic_limit(charger_id = "EH32498", current = "20")
        turned_off_car_red = False

    if c < 70 and turned_off_all == False:
        switch.bryter_varmvannsbereder.turn_off()
        switch.turn_off(entity_id="switch.heavy_duty_switch")
        turned_off_all = True

    if c > 72 and turned_off_all == True:
        switch.bryter_varmvannsbereder.turn_on()
        switch.turn_on(entity_id="switch.heavy_duty_switch")
        turned_off_all = False

    if c < 2 and turned_off_all == False:
        climate.turn_off(entity_id="climate.thermostat_38",entity_id="climate.thermostat_41",entity_id="climate.thermostat_35,entity_id="climate.gang",entity_id="climate.stue_vindu",entity_id="climate.loftstue_2021",entity_id="climate.hovedsoverom")
        turned_off_all = True

    if c > 5 and turned_off_all == True:
        climate.turn_on(entity_id="climate.thermostat_38",entity_id="climate.thermostat_41",entity_id="climate.thermostat_35",entity_id="climate.gang",entity_id="climate.stue_vindu",entity_id="climate.loftstue_2021",entity_id="climate.hovedsoverom")
        turned_off_all = False
    
@state_trigger("input_select.nettleie_pristrinn")
def setpoint(value=None):
    pid.setpoint = float(value) - 0.2

 

Min kode ser nå slik ut, men jeg er faktisk usikker på om den virker. Mye mulig dette er for avansert for meg, men syns løsningen din var for god til å passere. Lastet ned PID i hacks også, men opplevde det enda vanskeligere å forstå. 

Jeg har ikke Tibber, men egen AMS leser.

 

Endret av selvesteha
Skrevet

Her er det en # på linjen og alt bak dette tegnet vil bli tolket som en kommentar. Du må ta vekk # i starten på hver av linjene

 

#p, i, d = pid.components
#state.set("sensor.regulator_p", round(p,1))
#state.set("sensor.regulator_i", round(i,1))
#state.set("sensor.regulator_d", round(d,1))
Skrevet

Det er noen logiske feil i det du har laget.

Når c < 70 vil to brytere slås av samtidig som turned_off_all settes til true. Hvis c fortsetter å synke i verdi til mindre enn 2 så skjer det ingenting med de climate du prøver å skru av fordi turned_off_all er true og ikke false.

Du må heller splitte det opp i en turned_off_vvb og turned_off_climate.

Men når det gjelder vvb så trenger du ikke noen turned_off_all eller turned_off_vvb. Du kan heller teste på om vvb allerede er avslått eller påslatt ved å sjekke state på switch.heavy_duty_switch

Dette, switch.turn_off(entity_id="switch.heavy_duty_switch"), kan du godt skrive som du har gjort. Men en litt mer lesbar variant er å skrive det som switch.heavy_duty_switch.turn_off(). Smak og behag, helt klart.......

  • Like 1
Skrevet

Takk @stigvi. Da tror jeg du har fått meg i riktig rettning. Jeg begynner å forstå noe av sammenhengen her, det kan jo også hjelpe :)

from simple_pid import PID

pid = PID(40.0, 0.4, 2500.0, setpoint=float(input_select.nettleie_pristrinn) - 0.2)
pid.set_auto_mode(False)
pid.sample_time = 1.9
pid.output_limits = (0, 100)
pid.proportional_on_measurement = False
pid.set_auto_mode(True, last_output=100.0)
last_c = 100.0
turned_off_all = False
turned_off_vvb = False
turned_off_climate = False
turned_off_car_red = False
sensor.regulator_energy_usage = 100.0

@state_trigger("sensor.aidon_active_power_import")
def new_state():
    global pid
    global last_c
    global turned_off_all
    global turned_off_vvb
    global turned_off_climate
    global turned_off_car_red
    
    c = (0.9 * last_c) + (0.1 * pid(float(sensor.estimated_hourly_consumption)))
    p, i, d = pid.components
    state.set("sensor.regulator_p", round(p,1))
    state.set("sensor.regulator_i", round(i,1))
    state.set("sensor.regulator_d", round(d,1))
    
    if round(last_c, 0) != round(c, 0):
        sensor.regulator_energy_usage = round(c, 0)
        
        v = max(5 * round(c, 0) - 400, 0.0)
        number.effekt_varmtvannsbereder.set_value(round(v,1))

    last_c = c

    if c < 10 and turned_off_car_red == False:
        easee.set_charger_dynamic_limit(charger_id = "EH32498", current = "0")
        turned_off_car_red = True

    if c > 12 and turned_off_car_red == True:
        easee.set_charger_dynamic_limit(charger_id = "EH32498", current = "20")
        turned_off_car_red = False

    if c < 70 and turned_off_vvb == False:
        switch.bryter_varmvannsbereder.turn_off()
        switch.turn_off(entity_id="switch.heavy_duty_switch")
        turned_off_vvb = True

    if c > 72 and turned_off_vvb == True:
        switch.bryter_varmvannsbereder.turn_on()
        switch.turn_on(entity_id="switch.heavy_duty_switch")
        turned_off_vvb = False

    if c < 2 and turned_off_climate == False:
        climate.turn_off(entity_id="climate.thermostat_38",entity_id="climate.thermostat_41",entity_id="climate.thermostat_35,entity_id="climate.gang",entity_id="climate.stue_vindu",entity_id="climate.loftstue_2021",entity_id="climate.hovedsoverom")
        turned_off_climate = True

    if c > 5 and turned_off_climate == True:
        climate.turn_on(entity_id="climate.thermostat_38",entity_id="climate.thermostat_41",entity_id="climate.thermostat_35",entity_id="climate.gang",entity_id="climate.stue_vindu",entity_id="climate.loftstue_2021",entity_id="climate.hovedsoverom")
        turned_off_climate = False
    
@state_trigger("input_select.nettleie_pristrinn")
def setpoint(value=None):
    pid.setpoint = float(value) - 0.2

 

Skrevet

Hei @stigvi. Jeg finner fremdeles ikke sensorene 

sensor.regulator_energy_usage, 
sensor.regulator_p
sensor.regulator_i
sensor.regulator_d

Misforstod jeg da jeg trodde de opprettet seg selv? Eller må jeg selv opprette dem?

Skrevet

Det enkleste er at HA oppretter sensoren. Alternativt kan du la pyscript opprette sensoren når pyscript kjører.

 

template:
    - sensor:
        - name: "Regulator energy usage"
          unit_of_measurement: "%"
          state_class: "measurement"
          device_class: "power_factor"
          state: "{{100}}"

 

Sensorene sensor.regulator_p, sensor.regulator_i, sensor.regulator_d trenger du bare hvis du skal tune pid regulatoren. Jeg ville bare ha brukt @stigvi sine verdier.

  • Like 1
Skrevet
haraldov skrev (4 minutter siden):

Det enkleste er at HA oppretter sensoren. Alternativt kan du la pyscript opprette sensoren når pyscript kjører.

 

template:
    - sensor:
        - name: "Regulator energy usage"
          unit_of_measurement: "%"
          state_class: "measurement"
          device_class: "power_factor"
          state: "{{100}}"

 

Sensorene sensor.regulator_p, sensor.regulator_i, sensor.regulator_d trenger du bare hvis du skal tune pid regulatoren. Jeg ville bare ha brukt @stigvi sine verdier.

Takk for svar @haraldov Det ser ut til å fungere

Skrevet

Jeg har forenklet scriptet til stigvi da jeg er nybegynner i pyscript og Python. Jeg bruker HA automasjoner til å stoppe strømlaster (VVB, varmekabler og elbillader) når sensor.regulator_energy_usage er mindre enn 100 %. Dette blir gjort i prioritert rekkefølge.

from simple_pid import PID

pid = PID(40.0, 0.4, 2500.0, setpoint=float(input_select.nettleie_pristrinn) - 0.2)
pid.set_auto_mode(False)
pid.sample_time = 1.9
pid.output_limits = (0, 100)
pid.proportional_on_measurement = False
pid.set_auto_mode(True, last_output=100.0)
last_c = 100.0
turned_off_all = False
turned_off_car = False

@state_trigger("sensor.accumulated_consumption_current_hour_toraldasen_32")
def new_state():
    global pid
    global last_c
    global turned_off_all
    global turned_off_car
    
    c = (0.9 * last_c) + (0.1 * pid(float(sensor.estimated_consumption_current_hour_toraldasen_32)))
    
    if round(last_c, 0) != round(c, 0):
        sensor.regulator_energy_usage = round(c, 0)

    last_c = c
    
@state_trigger("input_select.nettleie_pristrinn")
def setpoint(value=None):
    pid.setpoint = float(value) - 0.2

 

Bruker Tibber sine sensorer for beregnet og nåværende strømforbruk per time istedenfor ams2mqtt sensorene. 

 

  • Like 2
Skrevet

Ja, jeg har kopiert litt fra deg også. Jeg har ikke Tibber, så jeg sliter litt med å finne ut hvordan jeg kan opprette sensor for beregnet strømforbruk den neste timen.  Den jeg har ser ikke riktig ut.

Skrevet
selvesteha skrev (1 time siden):

Ja, jeg har kopiert litt fra deg også. Jeg har ikke Tibber, så jeg sliter litt med å finne ut hvordan jeg kan opprette sensor for beregnet strømforbruk den neste timen.  Den jeg har ser ikke riktig ut.

Det skulle være grei skuring. Hva er det du har nå?

Skrevet
stigvi skrev (20 timer siden):

Det skulle være grei skuring. Hva er det du har nå?

Jeg har prøvd meg på en oppskrift jeg fant med intergration og utility meters. Men noe var galt da den viste alt for mye. Jeg slettet dem, men finner ikke tilbake til den oppskriften. Jeg har AHMSAN, og får ut sensor med forbruk. Men jeg mangler altså nå den beregnet strømforbruk den neste timen. 

Skrevet

Jeg bruker 

 

‘’

- platform: integration 

  source: sensor.kaifa_import # watt sensor

  name: hour_total_kwh

  method: left

  unit_prefix: k

  round: 3

  ‘’

 

Døgnmaksene jeg lagrer stemmer 100% med det som vises på bkk.no (nettleverandør) 

  • Like 1
Skrevet
Kim123 skrev (33 minutter siden):

Jeg bruker 

 

‘’

- platform: integration 

  source: sensor.kaifa_import # watt sensor

  name: hour_total_kwh

  method: left

  unit_prefix: k

  round: 3

  ‘’

 

Døgnmaksene jeg lagrer stemmer 100% med det som vises på bkk.no (nettleverandør) 

Takk, prøver den. Det vil jo være svært mye enklere enn jeg trodde.

Skrevet
selvesteha skrev (3 timer siden):

Jeg har AHMSAN, og får ut sensor med forbruk. Men jeg mangler altså nå den beregnet strømforbruk den neste timen. 

Den har det, altså forbruk i inneværende time.

Skrevet
stigvi skrev (9 timer siden):

Den har det, altså forbruk i inneværende time.

Ja, men jeg får ikke disse tallene til å stemme med det jeg ser dere bruker. Se mine sensorer fra AMSHAN måler

 

Sensorer

Active power export (Q2+Q3)
0 W
Akkumulert strømforbruk
110 409,86 kWh
Akkumulert strømproduksjon
0,0 kWh
Cumulative hourly reactive export energy (R-) (Q3+Q4)
5 795,27 kVArh
Cumulative hourly reactive import energy (R+) (Q1+Q2)
6 985,43 kVArh
Current phase L1
6,0 A
Current phase L2
3,6 A
Current phase L3
22,1 A
Phase L1 voltage
234,6 V
Phase L2 voltage
234,5 V
Phase L3 voltage
234,8 V
Reactive power export (Q3+Q4)
769 var
Reactive power import (Q1+Q2)
0 var
Strømforbruk
 
Skrevet
selvesteha skrev (2 minutter siden):

Ja, men jeg får ikke disse tallene til å stemme med det jeg ser dere bruker. Se mine sensorer fra AMSHAN måler

 

Sensorer

Active power export (Q2+Q3)
0 W
Akkumulert strømforbruk
110 409,86 kWh
Akkumulert strømproduksjon
0,0 kWh
Cumulative hourly reactive export energy (R-) (Q3+Q4)
5 795,27 kVArh
Cumulative hourly reactive import energy (R+) (Q1+Q2)
6 985,43 kVArh
Current phase L1
6,0 A
Current phase L2
3,6 A
Current phase L3
22,1 A
Phase L1 voltage
234,6 V
Phase L2 voltage
234,5 V
Phase L3 voltage
234,8 V
Reactive power export (Q3+Q4)
769 var
Reactive power import (Q1+Q2)
0 var
Strømforbruk
 



Har du tatt med en sensor med state_topic som dette?

state_topic: "power/realtime/import/hour"

Skrevet

Ser du mangler effekt sensoren. Hvilken måler har du? 

 

Anbefaler forøvrig MQTT Explorer, kan da logge deg på mqtt serveren og se på topicer

Skrevet
Kim123 skrev (1 time siden):

Ser du mangler effekt sensoren. Hvilken måler har du? 

 

Anbefaler forøvrig MQTT Explorer, kan da logge deg på mqtt serveren og se på topicer

Jeg har brukt AMSHAN oppskriften med en Tibber Pulse måler. 

stigvi skrev (2 timer siden):



Har du tatt med en sensor med state_topic som dette?

state_topic: "power/realtime/import/hour"

Nei, jeg har ikke funnet noen slik sensor.

Skrevet

Hei igjen. Jeg opplever at Regulator Energy Usage står på 100% hele tiden. Kan det stemme? Jeg ville tro den måtte justere seg noe, men kan det ha med at jeg til enhver tid holder meg godt innenfor kapasitetsleddet? 

Skrevet
selvesteha skrev (1 time siden):

Hei igjen. Jeg opplever at Regulator Energy Usage står på 100% hele tiden. Kan det stemme? Jeg ville tro den måtte justere seg noe, men kan det ha med at jeg til enhver tid holder meg godt innenfor kapasitetsleddet? 

Hvis du er godt innenfor så er den på 100%, ja

  • Like 1
Skrevet
stigvi skrev (På 18.12.2022 den 9.28):

Hvis du er godt innenfor så er den på 100%, ja

Jeg mistenker at noe ikke stemmer, den står konsekvent på 100% alltid. Men jeg forstår ikke hva som kan være galt.

Skrevet
selvesteha skrev (50 minutter siden):

Jeg mistenker at noe ikke stemmer, den står konsekvent på 100% alltid. Men jeg forstår ikke hva som kan være galt.

Du må kikke på de sensorene som er "input". Endrer de seg som forventet?

Skrevet
stigvi skrev (På 21.12.2022 den 18.16):

Du må kikke på de sensorene som er "input". Endrer de seg som forventet?

Ja, både energi og estimert neste timen sensor fungerer nå. Men den står konsekvent på 100%, og jeg ser at den ikke reduserer noen av tingene for å holde kapasiteten under valgt input. Er det noe jeg kan ha gått glipp av rundt scriptet? Finnes det noen mulighet til å sjekke at scriptet fungerer som det skal?

Bli med i samtalen

Du kan publisere innhold nå og registrere deg senere. Hvis du har en konto, logg inn nå for å poste med kontoen din.

Gjest
Skriv svar til emnet...

×   Du har limt inn tekst med formatering.   Lim inn uten formatering i stedet

  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...

Viktig informasjon

Vi har plassert informasjonskapsler/cookies på din enhet for å gjøre denne siden bedre. Du kan justere dine innstillinger for informasjonskapsler, ellers vil vi anta at dette er ok for deg.