stigvi
Medlemmer-
Innlegg
2 750 -
Ble med
-
Besøkte siden sist
-
Dager vunnet
155
Innholdstype
Profiler
Forum
Blogger
Nedlastninger
Artikler
Regler
Hendelser
Galleri
Store
Alt skrevet av stigvi
-
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
- 16 svar
-
- 1
-
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.
-
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.
-
Jeg jobber fulltid med programmering og Esphome er noe av det "gøyeste" jeg har vært borti. Det er faktisk veldig tilfredstillende å bruke "esphome run en_eller_annen.yaml" på kommandolinje for å kompilere, linke og laste opp ny firmware via OTA. Og finnes ikke enheten på lokalnettet, så spør den om jeg vil laste det ned til en dings koblet til USB-porten. Dette virker så bra at jeg følte meg trygg på å endre en esp32 kode mens jeg var på en månedslang tur i USA. En liten redigering i teksteditor i Home Assistant via mobil. Og en kompilering, linking og OTA ved hjelp av esphome for arm slik at jeg kan kjøre det på en raspberry pi (som kjører i en docker sammen med Home Assistant). Noen sekunder etterpå fikk jeg melding om at esp32 dingsen var startet opp igjen. Jeg har en EPROM brenner liggende hjemme og det var en tid da jeg programmerte 8-bits mikrokontrollere i assembly. Det var kjekt, det også. Men OTA funksjonaliteten og lettheten i å endre på kode i Esphome, det er en ny verden. Fordi resultatet kommer så fort.
-
Det finnes på github https://github.com/esphome/esphome/tree/dev/esphome/components
-
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.
-
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.
-
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.
-
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
-
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?
-
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....... 🤪
- 7 svar
-
- 2
-
Hehe. Hva med å bruke et reed rele eller en annen magnetkontakt som tåler nok strøm til å drive lyset?
-
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.
-
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.
-
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å.
- 36 svar
-
- 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)
- 2 svar
-
- 1
-
Ja, som du så er min yaml for esp noden.
-
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.
- 26 svar
-
- 1
-
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.