stigvi
-
Innlegg
2 609 -
Ble med
-
Besøkte siden sist
-
Dager vunnet
136
Innholdstype
Profiler
Forum
Blogger
Nedlastninger
Artikler
Regler
Hendelser
Galleri
Store
Stratagem
Innlegg skrevet av stigvi
-
-
Det finnes en mellomløsning hvis en synes HA sine automasjoner er "dårlige" og heller ikke har lyst til å bruke node-red.
Jeg selv er der. HA automasjoner er forsåvidt greie nok, men når en har hundrevis så mister en oversikten i HA sin flate automasjonsliste. Det går ikke å kategorisere dem eller plassere de i mapper. Men jeg synes allikevel en får til det meste. For meg er det oversikten det skorter på.
Jeg jobber med programmering så for meg var det helt naturlig å ta i bruk pyscript, https://github.com/custom-components/pyscript
Denne er langt mer lettvekt enn å gå for node-red, men programmering er lite brukervennlig hvis en ikke har erfaring fra før med det. -
Einar skrev (1 time siden):
Hva som er enkelt for deg og meg kan være ganske forskjellig.
Det er sant. Men et automasjonssystem er alltid enklere enn to som skal kommunisere med hverandre. -
KISS er noe jeg streber etter når det gjelder hjemmeautomasjon.
https://en.wikipedia.org/wiki/KISS_principle
-
Jeg fikk vel egentlig svar på det jeg lurte på. Jeg sliter med at amsleser ikke alltid får med seg kwh-teller oppdatering som sendes hver time. Jeg har nettopp byttet til en PowU fra en egenlagd og det samme problemet skjer på begge.
Det som skjedde var at den kontinuerlige telleren for dagsforbruk gikk ned ca 4kWh kl 10:00 og så spratt den opp ca 4kWh klokken 11:00. En ser hoppet mellom melding 49 og 50 nedenfor. Da tyder det på at dagsforbruket er basert på en integrasjon siste time og at resten av døgnets timer er på grunnlag av målerstand.
Det gjør det uansett svært vanskelig å bruke Energy Dashboard i HA. Jeg må egentlig mekke i hop et eller annet selv som tar høyde for at data mangler.
-
@gskjold
For meg er det et lite problem at jeg ikke vet hvordan amsleser kommer fram til dagsforbruket. Jeg ser av timeforbruket at de integrerer opp ved å bruke Riemann summering med "right" som innverdi. Jeg har testet litt med Riemann summering direkte i HA og ser at resultatet av integreringen blir mer nøyaktig med "middle" (eller trapezoidal) innverdi. Har planer om å skrive en feature request og spørre om de kan endre fra "right" til "middle" for å bedre nøyaktigheten.
Når det gjelder dagsforbruket som oppdateres "kontinuerlig", er det da en integrering i 24 timer eller er det integrering i 1 time pluss rapporterte målerverdier fra måleren i de foregående timene. Jeg har kikket bittelitt i koden, men fant det ikke. Hvis de integrerer i 24 timer, ser jeg for meg at dette tallet avviker en del fra det reelle når det nærmer seg slutt på døgnet. -
kodax skrev (10 timer siden):
noe som virker som en merkelig begrensning
Det er vel ment som en frostsikring og i så fall ikke merkelig i det hele tatt. Jeg innbiller meg at det er ganske vanlig å begrense til 5-7 grader.
-
Info om esphome sin støtte for BK7231N prosessoren er her: https://esphome.io/components/libretiny
-
Esphome har støtte for CB2S. Mon tro hva som skiller den i fra CB3S.
-
Jeg fant ut jeg ville gjøre noe med dette selv og her er min løsning:
Jeg har laget en mal-sensor som dette
template: - trigger: - platform: time_pattern minutes: 59 seconds: 55 sensor: - unique_id: d0edb519-03b2-4848-9b86-ac39bb4d5a90 name: klepp_energi_total_energi_denne_time state_class: total_increasing unit_of_measurement: kWh device_class: energy state: "{{ (float(states('sensor.klepp_energi_total_energi')) + float(states('sensor.energy')))|round(3) }}"
Så har jeg satt opp energy dashboard til å bruke denne nye sensoren.
Det som skjer er at 5 sekund før hver hele time blir denne sensoren satt til forrige times kWh teller som rapportert i fra måleren pluss timesforbruk som min HAN leser genererer ut i fra effekt som den integrerer opp. Jeg bruker amsleser. Jeg mener Tibber Pulse også har denne, men er ikke helt sikker. Uansett kan du bruke Home Assistant sin "Integration - Riemann sum integral" til å beregne den.
Løsningen har en svakhet. Det blir ikke helt nøyaktig. Litt skyldes at jeg mangler 5 sekund og litt skyldes at amsleser ikke er helt nøyaktig. Men avviket er stort sett innenfor 10-20Wh. Det er ikke mye og for meg en bedre løsning enn å ha en graf som er forskjøvet. Det positive er at integreringen starter på null hver time så en eventuell feil blir ikke summert opp gjennom hele døgnet.
Dette skrev jeg 12:40 og siste time i grafen er for 11:00 til 12:00
-
Jeg vil gjerne be om at dere gir en stemme på denne: https://community.home-assistant.io/t/energy-dashboard-is-shifted-one-hour/685596
- 1
-
minim skrev (10 timer siden):
Trodde dette fungerte slik at de automatisk fant router tilgjengelig egentlig.
Det gjør de. Men ikke nødvendigvis når du selv ønsker det. De finner nye ruter når de selv detekterer at det finnes noe bedre eller at den gamle ikke er god nok. Som oftest er de gamle rutene gode nok. I tillegg bruker de tid på det. Noen enheter bruker timer, andre enheter opp til en uke som feks enkelte Aqara sensorer.
-
Garasjeport er populært å automatisere. Her er min løsning og kanskje kan noen bruke det videre.
Min åpner er av den enkle typen. Den har to innganger, en for nødstopp og en for å veksle opp eller ned.
Til denne har jeg koblet til et esp32 kort som jeg kjører esphome på.
I esphome har jeg definert en "cover" som er tidsbasert og med endebrytere.
cover: - platform: feedback name: "${devicename}" id: garasjeport has_built_in_endstop: true assumed_state: false direction_change_wait_time: 5s close_endstop: status_lukket open_endstop: status_aapen open_duration: 15s close_duration: 18s
Endebrytere trenger en strengt tatt ikke, men uten de så er det vanskelig for Home Assistant å vite om port er åpen eller lukket. Jeg hadde i land tid en zigbee dørsensor som viste om port var lukket og status på den ble sendt til esp32 slik at jeg kunne sette status på "cover" at porten var igjen. Etterhvert har jeg byttet ut zigbee sensor med brytere koblet til esp32 direkte. Ikke fordi det virker bedre, men fordi jeg hadde lyst.
I tillegg har jeg definert noen binære sensorer i esphome som forteller om status på port. Det er lukket, åpen og i bevegelse. I tillegg noen trykknapper for å starte en sekvens og å avbryte denne sekvensen. Til slutt noen innverdier for å sette antall sekunder til port åpnes og lukkes.
I og med at denne er synlig i Home Assistant som en "cover", har jeg full kontroll på port. Jeg kan dra i en skyvekontroll og settte porten til en vilkårlig posisjon. Ikke så mye brukt til annet enn å sette i luftestilling eller åpne en halvmeter for å ta i mot en pakkelevering når jeg selv er på jobb. Jeg har et kamera inne i garasjen så jeg kan følge med på at pakken er kommet innenfor.
Til porten fulgte det med to fjernkontroller og disse var årsaken til at jeg lagde min egen styring. Fjernkontrollene har tydeligvis dagshumør og noen dager må en helt inntil garasjeportåpnerens antenne før de reagerer. Det var veldig frustrerende.
Det første jeg lagde, var en NFC brikke på en lur og usynlig plass i bilen. Når jeg holder telefon over denne, så åpnes port.
Etterhvert er det kommet zigbee-brytere inne i hus ved utgangsdør og inne i garasje ved port. Med disse kan jeg åpne og lukke, samt slå på nødstopp. Jeg har også lagd det slik at hvis bakluke på bil er åpen så slås nødstopp på. Da kan ikke port betjenes fra annet enn innside av garasje ved å slå av nødstopp først.
Og så har jeg en trykknapp i garasje som setter i gang en sekvens med å vente-åpne-vente-lukke. Da får en tid til å sette seg inn i bil og port går ned automatisk etter å ha kjørt ut. Sekvensen avbrytes hvis en trykker på knapp en gang til eller åpner garasjedør. Kona har en egen evne til å finne ut at hun ikke har bilnøkkel med seg og da må hun inn igjen i huset. Da er det dumt at port går opp og ned i mellomtiden.
Sensorer som esphome sender til Home Assistant, brukes til alarm og å trigge lys i garasje. Jeg setter også farge på en lyslist over port som viser om den er i bevegelse eller helt oppe.- 3
-
Einar skrev (1 time siden):
Jeg har bestilt en Sonoff Zigbee dongle for å se om det er deCONZ
Jeg byttet ut deconz og conbee ii med sonoff zbdongle-p og zigbee2mqtt. Det hele har gått fra smått irriterende til dønn stabilt. Ingenting har falt ut. Zigbee2mqtt har hatt en krasj på 1 år. Jeg har laget en automasjon som fanger opp dette og starter den på nytt hvis det skulle skje flere ganger.
-
Februar utgaven av Home Assistant får støtte for å lese inn forbruksdata fra Elvia.
https://rc.home-assistant.io/integrations/elvia
Edit: Tenk hvis vi kunne fått en universell løsning for å lese data fra elhub, men neida. Elhub har selvfølgelig ikke noe api for slikt. Hvorfor skulle et offentlig eid selskap som har som oppgave å lagre og distribuere målepunktdata, ha et api som privatpersoner kan bruke? -
Jeg er, som sikkert flere andre, avhengig av en daglig dose medisiner. Sånn er det når en er arvelig belastet med høyt blodtrykk. For å huske å ta medisin og for å ha kontroll på beholdning, har jeg brukt en app. Men har egentlig alltid tenkt at de som lager denne app'en får mye informasjon om meg. Så for et par dager siden fant jeg ut at jeg ville la Home Assistant styre dette.
Så det jeg har nå er en side i HA som viser min tablettbruk. I HA kan en sette visning og tilgang til sider ut i fra innlogget bruker så når kona tar dette fram på hennes mobil så ser hun sitt og ikke mitt. HA holder kontroll på beholdning og skifter farge på ikon når det nærmer seg tur til apotek. Har jeg ikke trykket på "Medisin tatt" knappen, får jeg et varsel på tlf som jeg svarer ja eller nei på (actionable notification som HA appen har). Her kan jeg sette "kanal" slik at jeg kan bruke egen varsellyd. Etter en time med litt fikling har jeg noe som fungerer bedre enn medisin-appen. Og herfra er det mange muligheter. Jeg kan feks varsle med et lys hjemme. Jeg kan la være å varsle på tlf hvis jeg ikke er hjemme. Det er jo ingen vits i det når tablettene ligger hjemme. Og jeg kan ha en trykknapp i skuffen på badet som teller ned beholdning.
PS. Jeg tar noen tabletter om morgen og noen om kveld. Selvsagt måtte jeg da lage det slik at det telles ned på de tablettene som gjelder for aktuelt tidsrom. Og det vises når de ble sist tatt.
- 4
-
MrE skrev (28 minutter siden):
Hvilken SSR benytter du? Nysgjerrig på hardwaren og hvordan dette er koblet sammen. 🙂
https://www.elfadistrelec.no/no/elektriske-releer-rm48-1no-50a-530v-skrueklemme-carlo-gavazzi-rm1a48d50/p/13745035?queryFromSuggest=true&itemList=suggested_search
Ser denne har økt voldsomt i pris, men det var denne jeg kjøpte. Esp8266 er på en Sonoff sak som hadde et lite 10A rele. Jeg loddet av releet og førte to ledninger fra der releets spole var koblet til, til optokobler på SSR. Og så satte jeg en inn en motstand i parallell slik at motstand totalt ble den samme som motstanden i releets spole.
Egenskap ved SSR som var viktig for meg var innkobling og utkobling ved nullgjennomgang av spenning og at den hadde riktig spenningsnivå på optokobler. Den er litt overdimensjonert på strøm, men greit nok. Kjøleplaten er stor nok til at den holder seg under 50 grader på full belastning.
- 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.
- 4
-
christbj skrev (37 minutter siden):
Det blir for enkelt, da kan han like godt kjøpe den ferdige lykten jeg lenket til. 😄
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....... 🤪
- 2
-
christbj skrev (3 minutter siden):
Da er det bedre med en reed-switch (magnetkontakt som lukker kretsen ved kontakt) som kan vekke ESP32 brikken fra dvale og så kan den igjen lukke et rele som tenner et lys.
Hehe.
Hva med å bruke et reed rele eller en annen magnetkontakt som tåler nok strøm til å drive lyset? -
Håvardgj skrev (11 timer siden):
Fikk endelig renovasjonen inn i Home Assistant til å se ut slik jeg ville:
reinstallerte "minrenovasjon" (https://github.com/eyesoft/home_assistant_min_renovasjon) etter at den sluttet å fungere etter en oppdatering. Satte opp template for å få endret fra å vise dato, til å vise gjenværende dager.
så nå blir det enklere å se når søppeldunken må trilles ned til veien
kode:
Jeg er ikke veldig flink med template-funksjonen, så det er ikke sikkert dette er den mest optimale løsningen, men det ser ut til å fungere
type: vertical-stack cards: - type: custom:mushroom-title-card title: Renovasjon alignment: center - type: horizontal-stack cards: - type: custom:mushroom-template-card primary: Restavfall secondary: >- {% set days_left = (strptime(states('sensor.restavfall'), '%d/%m/%Y', today_at()) | as_local - today_at()).days %} {% if days_left >= 2 -%} Om {{ days_left }} dager {% elif days_left == 1 %} I morgen {% elif days_left == 0 %} I dag! {% else %} Ukjent {%- endif %} icon: mdi:trash-can-outline multiline_secondary: true icon_color: grey fill_container: true entity: sensor.restavfall badge_icon: >- {% set days_left = (strptime(states('sensor.plast'), '%d/%m/%Y', today_at()) | as_local - today_at()).days %} {% if days_left == 1 %} mdi:exclamation {%- endif %} badge_color: red - type: custom:mushroom-template-card primary: Plastavfall secondary: >- {% set days_left = (strptime(states('sensor.plast'), '%d/%m/%Y', today_at()) | as_local - today_at()).days %} {% if days_left >= 2 -%} Om {{ days_left }} dager {% elif days_left == 1 %} I morgen {% elif days_left == 0 %} I dag! {% else %} Ukjent {%- endif %} icon: mdi:spray-bottle multiline_secondary: true icon_color: purple fill_container: true entity: sensor.plast badge_icon: >- {% set days_left = (strptime(states('sensor.plast'), '%d/%m/%Y', today_at()) | as_local - today_at()).days %} {% if days_left == 1 %} mdi:exclamation {%- endif %} badge_color: red - type: horizontal-stack cards: - type: custom:mushroom-template-card primary: Glass/Metall secondary: >- {% set days_left = (strptime(states('sensor.glass_metallemballasje'), '%d/%m/%Y', today_at()) | as_local - today_at()).days %} {% if days_left >= 2 -%} Om {{ days_left }} dager {% elif days_left == 1 %} I morgen {% elif days_left == 0 %} I dag! {% else %} Ukjent {%- endif %} icon: mdi:bottle-wine multiline_secondary: true icon_color: orange fill_container: true entity: sensor.glass_metallemballasje picture: '' badge_icon: >- {% set days_left = (strptime(states('sensor.plast'), '%d/%m/%Y', today_at()) | as_local - today_at()).days %} {% if days_left == 1 %} mdi:exclamation {%- endif %} badge_color: red - type: custom:mushroom-template-card primary: Bioavfall secondary: >- {% set days_left = (strptime(states('sensor.matavfall'), '%d/%m/%Y', today_at()) | as_local - today_at()).days %} {% if days_left >= 2 -%} Om {{ days_left }} dager {% elif days_left == 1 %} I morgen {% elif days_left == 0 %} I dag! {% else %} Ukjent {%- endif %} icon: mdi:food-apple-outline multiline_secondary: true icon_color: green fill_container: true entity: sensor.matavfall badge_icon: >- {% set days_left = (strptime(states('sensor.plast'), '%d/%m/%Y', today_at()) | as_local - today_at()).days %} {% if days_left == 1 %} mdi:exclamation {%- endif %} badge_color: red - type: horizontal-stack cards: - type: custom:mushroom-template-card primary: Papir secondary: >- {% set days_left = (strptime(states('sensor.papir'), '%d/%m/%Y', today_at()) | as_local - today_at()).days %} {% if days_left >= 2 -%} Om {{ days_left }} dager {% elif days_left == 1 %} I morgen {% elif days_left == 0 %} I dag! {% else %} Ukjent {%- endif %} icon: mdi:book-open-blank-variant multiline_secondary: true icon_color: blue fill_container: true entity: sensor.papir badge_icon: >- {% set days_left = (strptime(states('sensor.plast'), '%d/%m/%Y', today_at()) | as_local - today_at()).days %} {% if days_left == 1 %} mdi:exclamation {%- endif %} badge_color: red
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.- 2
-
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.
-
minim skrev (13 minutter siden):
Det høres bra ut. Da skal jeg prøve å legge over til node red i kveld å se hvordan det ser ut. Jeg jobber med bygg automasjon til dagen og eksperimentering med hjemme automasjon er virkelig noe helt annet. Savner Basic ting som å fritt kunne lage seg bilder og ikke bare "kort" samt mye friere funksjons programmering, men det ser ut som at node red har noe mer av dette enn home assistant. Man kan sikkert gjøre det meste i alt dette med åpen kildekode, men terskelen er såpass høy at jeg har ikke orket å bruke tid på å sette meg inn i det enda.
Sikkert dumt spørsmål, men har den statisk ip eller kan den ha fått tildelt ny ip ved strømstans?
Om du kjører Wireshark på maskinen modbus tcp kjører fra så har Wireshark ferdig filter for modbus tcp så du kan se om trafikk sendes ut og om det kommer noe svar.
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 detteSitatmye friere funksjons programmering
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å.- 1
-
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)
- 1
-
minim skrev (8 timer siden):
Snippet litt fra configen din. da jeg hadde noen spørsmål rundt hvordan du har bygget opp configen. I modbus config dokumentasjonen så viser de et oppsett lignende det jeg har brukt under her. Dette er et Heru S160ec anlegg hvor det meste fungerer, men "climates" ble feil etter at heru ga ut 1.10 firmware som endrer skalering på temperatur innganger (input registers), men ikke utganger (holding reister). Det er et sidespor til spørsmålet, men for å løse dette problemet tenkte jeg å sette opp et enkelt setpunkt som du har gjort med "number", men da ser jeg at du har bygget det opp veldig ulikt min config med "modbus_controller"/platform. Dette med platform og modbus hvor finner jeg dokumentasjon på måten du har løst dette på så jeg får lest litt om dette evnt har du en enkel forklaring på hvordan det henger sammen?
Jeg er rimelig lost i oppsett av home assistant så det er mulig jeg gjør ting helt feil i utgangspunktet her 😛 Configen min er noen år gammel også så mulig noe av det er en utdatert måte å gjøre det på.
Edit: Da fant jeg ut at det var en egen komponent knyttet til ESPn dere bruker så da får jeg gruble videre på min løsning som bruker modbus tcp direkte 🙂
https://esphome.io/components/modbus
modbus: - name: hub1 type: tcp host: 10.0.0.11 port: 502 sensors: - name: Utetemperatur unit_of_measurement: °C slave: 1 address: 1 input_type: input unique_id: 400 scale: 0.1 precision: 1 - name: Tilluftstemperatur unit_of_measurement: °C slave: 1 address: 2 input_type: input unique_id: 401 scale: 0.1 precision: 1 - name: Fraluftstemperatur unit_of_measurement: °C slave: 1 address: 3 input_type: input unique_id: 402 scale: 0.1 precision: 1 - name: Avkasttemperatur unit_of_measurement: °C slave: 1 address: 4 input_type: input unique_id: 403 scale: 0.1 precision: 1 - name: Etter varmegjenvinner unit_of_measurement: °C slave: 1 address: 6 input_type: input unique_id: 404 scale: 0.1 precision: 1 - name: Filter tid til skifte unit_of_measurement: dager slave: 1 address: 19 input_type: input unique_id: 405 - name: Tilluftsvifte unit_of_measurement: '%' slave: 1 address: 24 input_type: input unique_id: 406 - name: Fraluftsvifte unit_of_measurement: '%' slave: 1 address: 25 input_type: input unique_id: 407 - name: Varmebatteri unit_of_measurement: '%' slave: 1 address: 28 scale: 0.3921568 input_type: input unique_id: 500 - name: Gjenvinner unit_of_measurement: '%' scale: 0.392156 slave: 1 address: 29 input_type: input unique_id: 408 - name: Setpunkt økonomi unit_of_measurement: °C slave: 1 address: 0 input_type: holding unique_id: 409 - name: Setpunkt comfort unit_of_measurement: °C slave: 1 address: 1 input_type: holding unique_id: 410 - name: heater type slave: 1 address: 65 input_type: holding unique_id: 417 - name: heater enabled slave: 1 address: 66 input_type: holding unique_id: 418 switches: - name: "Heater" slave: 1 address: 66 command_on: 1 command_off: 0 write_type: holding scan_interval: 6 verify: input_type: holding address: 66 state_on: 1 state_off: 0 - name: "Boost" slave: 1 address: 2 command_on: 1 command_off: 0 write_type: coil scan_interval: 6 verify: input_type: coil address: 2 state_on: 1 state_off: 0 climates: - name: "Setcomfort" address: 2 input_type: input max_temp: 35 min_temp: 15 offset: 0 precision: 1 scale: 1 target_temp_register: 1 temp_step: 1 temperature_unit: °C unique_id: 419 template: - sensor: - name: "varmebatteri_effekt" unit_of_measurement: W state: "{{ states('sensor.varmebatteri') | int * 12 }}" - name: "virkningsgradtil" unit_of_measurement: '%' state: "{{ (((states('sensor.etter_varmegjenvinner') | int - states('sensor.utetemperatur') | int ) / (states('sensor.fraluftstemperatur') | int - states('sensor.utetemperatur') | int )) * 100)|round(1) }}" - name: "virkningsgradfra" unit_of_measurement: '%' state: "{{ (((states('sensor.fraluftstemperatur') | int - states('sensor.avkasttemperatur') | int ) / (states('sensor.fraluftstemperatur') | int - states('sensor.utetemperatur') | int )) * 100)|round(1) }}"
Ja, som du så er min yaml for esp noden.
Home Assistant for dumbommer?
i Home Assistant
Skrevet
Når det gjelder Home Assistant så er det neppe snakk om "hvis", men "når" de får en bedre måte å organisere dette på så kommer jeg selv til å gjøre om mange av mine python skript til Home Assistant automasjon.
Dette er typisk å slå på radio via Sonos når noen kommer hjem etter at huset har stått tomt. Det er en python funksjon på 4 linjer
@state_trigger("binary_sensor.noen_er_hjemme == 'on' and binary_sensor.noen_er_hjemme.old == 'off'") def somebodygothome(): media_player.stue.select_source(source = "NRK P1 Rogaland") media_player.volume_set(volume_level = 0.3, entity_id = "all")
og lages like enkelt i HA sin automasjon. Grunnen til at jeg ikke har gjort det er altså at det blir for mange slik små snutter. I pyscript kan jeg organisere det i mapper.
Ja, navneprefiks vil sannsynligvis løse det for meg også. Men jeg har tid til å vente enda litt til for å se om det kommer en grei måte å organisere det på.