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

stigvi

Medlemmer
  • Innlegg

    2 638
  • Ble med

  • Besøkte siden sist

  • Dager vunnet

    140

Alt skrevet av stigvi

  1. Min VVB er styrt av en esp8266 og den får stadig ny funksjonalitet. I sommer byttet jeg ut to DS18B20 sensorer med Oso sin sensorstav med 3 temperaturfølere. De 3 sensorene bruker jeg til å prioritere oppvarming av vannet. Hvis bunntemperatur kommer under ønsket temperatur, så varmes vannet med lav effekt og typisk rundt om 100W. Kommer sentertemp. under ønsket temperatur, så økes effekten "passelig" og hvis topptemperatur er under ønsket temp. så er det 100% effekt og 2kW. På den måten klarer jeg å stoppe at temperatur synker enda lavere uten å utfordre nettleie og å bruke minst mulig strøm når pris ikke er optimal. Temperatur settes til middels en gang i døgnet og på billigste timer. Til høy hver 11. dag på billigste timer. I det siste har jeg lagt inn nøyaktig beregning av oppvarmingstid slik at jeg treffer bedre på den billigste timen istedenfor å utnytte nest-billigste og 1/3 av den billigste. Effekten på varmeelementet er via en SSR så jeg kan styre effekt trinnløst vha puls-bredde modulering og dette er effektivt for å holde seg under effekttrinn på nettleie. Psnitt/Pmaks er snitt effekt på siste oppvarming delt på 2000W. Da får jeg et forholdstall som jeg bruker til å beregne oppvarmingstid på neste døgns syklus. Det gir ikke nøyaktig tid, men det er en god indikasjon når VVB blir nedprioritert i forhold til lading av biler. Esp8266 er selvsagt programmert ved hjelp av Esphome. Kodefilen er ikke mer enn 360 linjer.
  2. Ok, grei nok forklaring selv om jeg ikke helt er med på at C kode er så mye lettere å skrive enn yaml på et høyere nivå. Og da spesielt ikke når esphome har så mange ferdig lagde komponenter.
  3. Esphome er universell og støtter mqtt. Den har støtte for å sende data til HA i et mer effektivt binær format, men som de skriver, bruker en noe annet enn HA og vil bruke mqtt så slår en av denne muligheten for å sende i binærformat. https://esphome.io/components/mqtt.html?highlight=mqtt
  4. Med tanke på hvor ekstremt mye en får i esphome og hvor enkel denne er å bruke, er det litt interessant å høre hvorfor dere ikke velger å bruke den?
  5. Sant nok, dumme meg. Jeg tenkte på IKEA sine skaplys, men det er jo også for enkelt. Jeg har noen IKEA garderobelys med detektor for skapdør. De virker helt fint, men jeg burde allikevel bytte de ut....... 🤪
  6. Hehe. Hva med å bruke et reed rele eller en annen magnetkontakt som tåler nok strøm til å drive lyset?
  7. Dette du har gjort her med maler skal i teorien og i praksis ikke være nødvendig. Home Assistant skal vise noe tilsvarende helt på egenhånd. Her har jeg satt en sensor til .. og HA viser "Neste uke" i kortet. Settes dato til sensoren til 20. januar, viser kortet dette: For at dette skal virke, må sensor ha device_class satt til timestamp og sensor må ha en tilstand som tolkes som en dato og tid med tidssone, altså at den faktisk er en timestamp. Og i samme åndedrag - hvis en sensor har device_class satt til duration så vil et flyttall vises som timer, minutter og sekunder. Her er en sensor brukt som har verdien 1,2 og dette vises som 1:12:00 Men du har fått det til å virke slik du vil ha det og det er det viktigste. Min kommentar er bare til info om at det skal være mulig å gjøre dette på en lett måte.
  8. Og i visning av priser så setter jeg en "opacity" mindre enn 1 slik at jeg må ha kurvene for Tibber, Nordpool og Entso oppå hverandre for å gi en mørk blåfarge. Da er det lett å se på kurven om pris fra en av de mangler.
  9. Home Assistant har også bilder som en kan legge UI på. Men i utgangspunktet er det "kort" som er den enkle måten å lage det på. De fleste tror jeg løser dette med å installere pyscript modulen. Da kan en lage rutinene i python. https://hacs-pyscript.readthedocs.io/en/stable/overview.html Jeg tror nok du går på en liten blemme med å introdusere enda et nytt verktøy i automatiseringen istedenfor å sette seg inn i hvordan modbus konfigureringen virker i HA. Men det er jo bare min mening. Uanz, du får det nok til med node-red også.
  10. Jeg endrer stadig på dette og har tatt med mulighet for å hente strømpris fra Tibber. Skriptet velger selv hvor den skal hente prisen i fra, men hvis dette gjøres feil, kan jeg slå av kildene med brytere i UI. from datetime import datetime,timedelta import holidays YEAR = datetime.today().year NOR_HOLIDAYS = holidays.NO(years=[YEAR, YEAR+1]) state.persist('pyscript.total_pris_for_strom', default_value=0, default_attributes={"unit_of_measurement":"NOK"}) state.persist('pyscript.snittpris_for_strom', default_value=0, default_attributes={"unit_of_measurement":"NOK/kWh"}) state.persist('pyscript.spart_paa_strom', default_value=0, default_attributes={"unit_of_measurement":"NOK"}) state.persist('pyscript.strompris', default_value=0, default_attributes={"unit_of_measurement":"NOK/kWh"}) state.persist('pyscript.totalstrompris', default_value=0, default_attributes={"unit_of_measurement":"NOK/kWh"}) state.persist('pyscript.nettleie', default_value=0, default_attributes={"unit_of_measurement":"NOK/kWh"}) state.persist('pyscript.stromstotte', default_value=0, default_attributes={"unit_of_measurement":"NOK/kWh"}) state.persist('pyscript.spotpris', default_value=0, default_attributes={"unit_of_measurement":"NOK/kWh"}) state.persist('pyscript.gjennomsnittlig_strompris', default_value=0, default_attributes={"unit_of_measurement":"NOK/kWh"}) state.persist('pyscript.peak_strompris', default_value=0, default_attributes={"unit_of_measurement":"NOK/kWh"}) state.persist('pyscript.offpeak_1_strompris', default_value=0, default_attributes={"unit_of_measurement":"NOK/kWh"}) state.persist('pyscript.offpeak_2_strompris', default_value=0, default_attributes={"unit_of_measurement":"NOK/kWh"}) state.persist('pyscript.hoyeste_strompris', default_value=0, default_attributes={"unit_of_measurement":"NOK/kWh"}) state.persist('pyscript.laveste_strompris', default_value=0, default_attributes={"unit_of_measurement":"NOK/kWh"}) @time_trigger("cron(59 * * * *)") def akkumulere_stromkostnad(): p = round(float(pyscript.totalstrompris) * float(sensor.estimated_hourly_consumption) + float(pyscript.total_pris_for_strom), 2) pyscript.total_pris_for_strom = p if float(sensor.consumption_thisday) > 0: pyscript.snittpris_for_strom = round(float(pyscript.total_pris_for_strom) / float(sensor.consumption_thisday), 4) pyscript.spart_paa_strom = round(float(sensor.consumption_thisday) * (float(pyscript.gjennomsnittlig_strompris) - float(pyscript.snittpris_for_strom)), 2) @time_trigger("cron(0 0 * * *)") def nullstille_stromkostnad(): pyscript.total_pris_for_strom = 0 @time_trigger("cron(0 * * * *)") @state_trigger("input_button.oppdater_strompris") def strompris(): #state.set("pyscript.strompris", new_attributes={}) grid_night = float(input_number.nettleie_natt) / 100.0 grid_day = float(input_number.nettleie_dag) / 100.0 additional_costs = float(input_number.paslag_strom) / 100.0 entso_valid = False if sensor.average_electricity_price_today.prices is not None and len(sensor.average_electricity_price_today.prices) >= 48: ld = datetime.strptime(sensor.average_electricity_price_today.prices[47]["time"], "%Y-%m-%d %H:%M:%S%z") if datetime.now() < ld.replace(tzinfo=None): entso_valid = True if input_boolean.strompriskilde_tibber == 'on' and sensor.energy_price_gabriel_edlands_veg_16.tomorrow_valid == True: pyscript.strompris.updatetime = datetime.now().isoformat() pyscript.strompris.source = "Tibber" l = [] for sourceprice in sensor.energy_price_gabriel_edlands_veg_16.raw_today + sensor.energy_price_gabriel_edlands_veg_16.raw_tomorrow: pr = {} d = datetime.strptime(sourceprice["time"], "%Y-%m-%dT%H:%M:%S.000%z") pr["start"] = d.isoformat() pr["end"] = (d + timedelta(hours=1)).isoformat() pr["spotprice"] = round(float(sourceprice["total"]) - float(additional_costs), 4) pr["gridprice"] = round(grid_day if is_peak(d) else grid_night, 4) pr["payback"] = round(payback(float(pr["spotprice"])), 4) pr["totalprice"] = round(float(pr["spotprice"]) + float(pr["gridprice"]) + float(additional_costs) - float(pr["payback"]), 4) l.append(pr) pyscript.strompris.prices = l elif input_boolean.strompriskilde_nordpool == 'on' and sensor.nordpool.tomorrow_valid == True: pyscript.strompris.updatetime = datetime.now().isoformat() pyscript.strompris.source = "Nordpool" l = [] for sourceprice in sensor.nordpool.raw_today + sensor.nordpool.raw_tomorrow: pr = {} d = sourceprice["start"] pr["start"] = d.isoformat() pr["end"] = (d + timedelta(hours=1)).isoformat() pr["spotprice"] = round(float(sourceprice["value"]), 4) pr["gridprice"] = round(grid_day if is_peak(d) else grid_night, 4) pr["payback"] = round(payback(float(pr["spotprice"])), 4) pr["totalprice"] = round(float(pr["spotprice"]) + float(pr["gridprice"]) + float(additional_costs) - float(pr["payback"]), 4) l.append(pr) pyscript.strompris.prices = l elif input_boolean.strompriskilde_entsoe == 'on' and entso_valid == True: pyscript.strompris.updatetime = datetime.now().isoformat() pyscript.strompris.source = "Entso-e" l = [] for sourceprice in sensor.average_electricity_price_today.prices: pr = {} d = datetime.strptime(sourceprice["time"], "%Y-%m-%d %H:%M:%S%z") pr["start"] = d.isoformat() pr["end"] = (d + timedelta(hours=1)).isoformat() pr["spotprice"] = round(float(sourceprice["price"]), 4) pr["gridprice"] = round(grid_day if is_peak(d) else grid_night, 4) pr["payback"] = round(payback(float(pr["spotprice"])), 4) pr["totalprice"] = round(float(pr["spotprice"]) + float(pr["gridprice"]) + float(additional_costs) - float(pr["payback"]), 4) l.append(pr) pyscript.strompris.prices = l price_sum = 0.0 peak_sum = 0.0 offpeak1_sum = 0.0 offpeak2_sum = 0.0 high = -1000 low = 1000 for sourceprice in pyscript.strompris.prices: if datetime.now() >= datetime.fromisoformat(sourceprice["start"]).replace(tzinfo=None) and datetime.now() < datetime.fromisoformat(sourceprice["end"]).replace(tzinfo=None): pyscript.strompris = round(float(sourceprice["totalprice"]), 4) pyscript.totalstrompris = round(float(sourceprice["totalprice"]), 4) pyscript.nettleie = round(float(sourceprice["gridprice"]), 4) pyscript.stromstotte = round(float(sourceprice["payback"]), 4) pyscript.spotpris = round(float(sourceprice["spotprice"]), 4) if datetime.now().day == datetime.fromisoformat(sourceprice["start"]).day: price_sum += sourceprice["totalprice"] if datetime.fromisoformat(sourceprice["start"]).hour < 8: offpeak1_sum += sourceprice["totalprice"] elif datetime.fromisoformat(sourceprice["start"]).hour < 20: peak_sum += sourceprice["totalprice"] else: offpeak2_sum += sourceprice["totalprice"] if high < sourceprice["totalprice"]: high = sourceprice["totalprice"] if low > sourceprice["totalprice"]: low = sourceprice["totalprice"] pyscript.gjennomsnittlig_strompris = round(float(price_sum) / 24.0, 4) pyscript.peak_strompris = round(float(peak_sum) / 12.0, 4) pyscript.offpeak_1_strompris = round(float(offpeak1_sum) / 8.0, 4) pyscript.offpeak_2_strompris = round(float(offpeak2_sum) / 4.0, 4) pyscript.hoyeste_strompris = round(float(high), 4) pyscript.laveste_strompris = round(float(low), 4) def is_peak(t : datetime): if t.isoweekday() >= 6 or t.hour <= 5 or t.hour >= 22 or t.date() in NOR_HOLIDAYS: return False else: return True def payback(spot : float): return max((spot - 0.9125) * 0.9, 0.0)
  11. stigvi

    Modbus

    Ja, som du så er min yaml for esp noden.
  12. Nei, det tror jeg ikke. Ikea sine lyspærer hadde for noen år siden en bug som gjorde at de ikke videresendte meldinger. Hjemme hos meg førte det til treg respons og ikke respons i det hele tatt. Men samtidig var deconz og conbee II ikke verdens beste så mulig annen programvare som feks zigbee2mqtt hadde fanget det opp bedre.
  13. Dette med strømpris siste time var et eksempel og ikke noe jeg bruker selv. Min mal for strømpris siste time ser slik ut: - unique_id: be7b58ab-a2da-4f51-b770-9583e1da4cb9 name: "Energy price last hour" unit_of_measurement: "NOK/kWh" device_class: monetary state: >- {% set s = (now()-timedelta(hours=1))|as_timestamp|timestamp_custom('%Y-%m-%dT%H:00:00+01:00') %} {{ (state_attr("pyscript.strompris", "prices")|selectattr("start", "eq", s)|list)[0].totalprice }} Den gjør samme jobben, bortsett fra at den endres på hver hele time istedenfor 1 minutt før. Men den er mer kryptisk og å bruke en mal-trigger istedenfor, viser at det går å lage slikt enkelt. Sannsynligvis er mal-triggere også mer effektive i og med at den evalueres en gang i timen, mens denne som er i dette innlegget evalueres hvert minutt.
  14. Et annet eksempel er strømpris for forrige time. Som kjent vil strømmåler i huset sende forbruk noen sekunder etter hver hele time. I "Energi" oppsettet til HA kan en knytte opp en sensor som inneholder strømpris, men dette bør da være pris som var i forrige time og ikke i den gjeldende timen. template: - trigger: - platform: time_pattern minutes: 59 sensor: - unique_id: be7b58ab-a2da-4f51-b770-9583e1da4cb9 name: "Energy price last hour" unit_of_measurement: "NOK/kWh" device_class: monetary state: "{{ states('pyscript.totalstrompris')|round(6) }}"
  15. Mon tro om de vurderer en offisiell Home Assistant integrasjon. Home Assistant har 314.000 aktive brukere og 12500 av disse bor i Norge og Sverige. Hvor mye har Homey solgt i disse to landene?
  16. Det er noe jeg ikke har tenkt så mye over. Men Amina S ser interessant ut. Jeg hadde letet etter en som har lokal styring. Jeg ønsker ikke å være avhengig av en skytjeneste. Det er noe som ser trygt ut der og da, men i et 20 år langt perspektiv har jeg ikke så mye tro på det. Jeg bruker Home Assistant og har mye utstyr basert på esphome. Så det er mulig jeg hadde sett på en ladeboks som jeg kunne styre via noen enkle releer. Jeg ser at min egen styring av easee boksene begrenser seg til å slå av og på lading for å treffe billige timer og å holde meg under effekttariff-trinn. I tillegg setter jeg ladestrøm to ganger i året til en vinter- og sommerinnstilling. Jeg henter ut ladeeffekt og ladekostnad fra easee, men dette havner i kategorien "kjekt å ha".
  17. Jeg har to easee ladebokser. Er litt skeptisk til å anbefale disse, nettopp pga uavklart situasjon for selskapet. Og så er de styrt via en skytjeneste. Fordelen med det er at de er lette å integrere, men samtidig er det noen problemer innimellom. Det har blitt langt mer stabilt siste årene, så det går rette veien. De har også lagt til lokal styring via mobil i tilfelle easee går dukken. Men da forsvinner nok app også så min plan B er i så fall å reklamere ovenfor forhandler på boksene hvis det skulle gå helt ille.
  18. Jeg lader to biler på 1,3kW hver (VW eGolf og VW Passat GTE) og klarer å holde meg under 5kWh/h i 8 av årets måneder. Men om vinteren må jeg opp i 10kWh/h for å kunne lade biler på natt, varme vann på natt og samtidig ha varmt badegolv om morgenen.
  19. Det var heller ikke det jeg kommenterte ..........
  20. Hvis de ikke tillater forskjellige kabler så bryter de med standarden såpass mye at jeg ikke kan forstå at de får lov å kalle det bil med type 2 kontakt.
  21. Z-Water kan fint brukes med både 230V, 24V og alle andre typer aktuatorer sålenge spenningen til aktuator er lavere eller lik 230V.
  22. For Nobø sin termostat kan en spesifisere disse verdiene: Gulvsensor (Ekstern temperatursensor) 22kOhm ved 25˚C (standardinnstilling) Andre kompatible gulvsensorverdier: 47kOhm v/25˚C 10kOhm v/25˚C 15kOhm v/25˚C 2kOhm v/25˚C 12kOhm v/25˚C Og her finnes verdier som ikke lar seg stille inn på Namron. Så det er tydeligvis ingen standard og heller ingen garanti for at eksisterende føler kan brukes. Men normalt er de lette å dra ut så hvorfor ikke bytte den?
  23. Et annet alternativ er å bytte ut ledningen til en tynn hvis målet er å redusere ladestrøm. Eventuelt åpne opp støpselet og bytte ut motstand som er der.
  24. Dette punktet må du løse med muligheter som eventuelt finnes i bilen. Ladestasjonen vet ingenting om batteritilstand. Jeg har lest at dette kan endre seg i fremtiden, men det gjelder i så fall for nye biler sammen med nye ladestasjoner.
  25. Innlegget er ment som et tips eller noe en kan dra nytte av til andre ting. Når en lager en malsensor, vil denne malen evalueres hver gang en entitet som er brukt i malen, endres. Dette er stort sett ønskelig, men noen ganger er det en hindring. I eksempelet under, beregner jeg oppvarmingstid for VVB og setter en binær sensor til På i de billigste timene og i så mange timer som det er nødvendig å varme vann. Problemet oppstår når temperaturen i vannet øker og da vil beregnet oppvarmingstid synke. Dette lager kluss når en skal plukke de billigste timene. En kan starte å varme vann i den billigste timen, men når en kommer til den nest billigste kan oppvarmingstiden sunket så mye at denne timen utelates. Å varme vannet krever bare en time til og den billigste timen er jo nettopp passert. Denne problemstillingen kan en omgå ved å bruke en ny funksjonalitet i HA. Så veldig ny er den derimot ikke. Mulig den har eksistert i et par år nå. Det dreier seg om å skille trigger / evaluering av mal til noe en selv bestemmer. Det kan være tid, tilstand, hendelse eller egentlig hva som helst. Dokumentasjon for dette, finner en her: https://www.home-assistant.io/docs/automation/trigger/ Triggere for automatisering er prikk lik triggere en kan bruke i maler og dokumentasjonen for disse er lik. I eksempelet nedenfor, trigger jeg beregning av oppvarmingstid kun i start på hver time og kun hvis VVB er avslått. Så snart en starter på å varme vann, vil ikke ny oppvarmingstid bli beregnet. Unntaket er når en setter ny temperatur en skal varme til, bare for å ta med det og å vise at en kan ha mange triggere. Etter min mening er dette en svært nyttig egenskap til mal-sensorer som ofte kan forenkle ganske mye. template: - trigger: - platform: template value_template: "{{ now().minute == 0 and states('sensor.effekt_varmtvann')|float(0) == 0 }}" - platform: state entity_id: - input_number.vvb_temperatur sensor: - unique_id: vvb_heating_time name: "vvb oppvarmingstid" unit_of_measurement: 'h' device_class: duration state: >- {{ ((states('input_number.vvb_temperatur')|float(80) - average(states('sensor.varmtvannstank_topp_temperatur')|float(60), states('sensor.varmtvannstank_senter_temperatur')|float(60), states('sensor.varmtvannstank_bunn_temperatur')|float(60))) / (iif(float(states('sensor.effektbegrensing')) > 8, 1.0, 2.0) / 194.0 / 0.001163))|round(1) }} - binary_sensor: - unique_id: billigste_timer_vvb name: billigste_timer_vvb state: >- {% set l=state_attr('pyscript.strompris', 'prices')[14:39]|sort(attribute='totalprice') %} {% set t = now().hour %} {% set d = now().day %} {% set h = states('sensor.vvb_oppvarmingstid')|float(0) %} {{ iif(h > 0, (t == as_datetime(l[0].start).hour and d == as_datetime(l[0].start).day), false) or iif(h > 1, (t == as_datetime(l[1].start).hour and d == as_datetime(l[1].start).day), false) or iif(h > 2, (t == as_datetime(l[2].start).hour and d == as_datetime(l[2].start).day), false) or iif(h > 3, (t == as_datetime(l[3].start).hour and d == as_datetime(l[3].start).day), false) or iif(h > 4, (t == as_datetime(l[4].start).hour and d == as_datetime(l[4].start).day), false) or iif(h > 5, (t == as_datetime(l[5].start).hour and d == as_datetime(l[5].start).day), false) or iif(h > 6, (t == as_datetime(l[6].start).hour and d == as_datetime(l[6].start).day), false) }}
×
×
  • 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.