Jump to content
  • Sign Up
Støtt hjemmeautomasjon! 🥇🥈🥉

Recommended Posts

Posted (edited)

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.

 

Edited by selvesteha
Posted

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))
Posted

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
Posted

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

 

Posted

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?

Posted

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

Posted

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
Posted

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.

Posted
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å?

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

Posted

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

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

Posted
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
 
Posted
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"

Posted

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

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

Posted

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? 

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

Posted
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?

Posted
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?

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.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.