haraldov Posted October 7, 2023 Posted October 7, 2023 I min enebolig styrer jeg varmen ved hjelp av Home Assistent og Python addon EMHASS (Energy Management for Home Assistant). Programmet EMHASS tar hensyn til høye og lave strømpriser, kraftproduksjon fra solcellepaneler og energilagring fra batterier og beregner med lineær programmering en optimalisert energibruk. I Home Assistant kan en deretter lage daglige automatiseringer basert på EMHASS sine forslag, som å styre varmekabler, varmepumpe og varmtvannsbereder når det er best å senke eller øke temperaturen. I mitt hjem senkes og økes varmekablene i stue, kjøkken, gang, bad1etg og bad2etg med tre grader, varmepumpe en grad og varmtvannsberederen slås av og på. Dokumentasjon: https://emhass.readthedocs.io/en/latest/forecasts.html Emhass addon: https://github.com/davidusb-geek/emhass-add-on Emhass begreper: deferrable loads = flyttbare laster som f.eks varmekabler med høy varmekapasitet Dayahead Optimization = oppdaterer strømpriser og tidspunkter de flyttbare lastene skal være på hvert døgn. Nordpool leverer strømprisene 24 timer frem i tid så Dayahead Optimization er det første dere bør prøve. MPC controller = Ønsker dere oppdatere strømpriser oftere enn hvert døgn (24 timer) så kan dere bruke mpc som optimaliseringsmetode. Jeg bruker det nå da jeg vil kontrollere tidspunkter varmepumpen og ladningen skal skje. Jeg oppdaterer da strømpriser og tidspunkter lastene skal være på hver 6 time. Kan oppdateres oftere hvis dere ønsker. Jeg bruker Nordpool til å hente strømprisene. Min enebolig har 12 solceller på garasjetaket med 3 mikroinvertere og 6 solceller på hovedhus med to mikroinvertere. Jeg har ikke husbatteri ennå. I Emhass addon -> Configuration har jeg brukt default verdier bortsett fra disse innstillingene: "optimization_time_step": 60 # Dette betyr 60 minutter fordi Nordpool leverer strømprisene hver time "sensor_power_photovoltaics": "sensor.ecu_current_power" # Apsystem ECU sensor for produsert strøm fra solceller i Watt "sensor_power_load_no_var_loads": "sensor.power_load_no_var_loads" # Template sensor som tar import strøm (AMS reader Active import) og trekker i fra deferrable loads du ønsker å ha med i emhass. template: - sensor: - name: "Power load no var loads" unique_id: fbfeef21-1aa3-4a54-b781-426f46fef597 unit_of_measurement: W device_class: power state: > {% set powerload = states('sensor.ams_cf58_p') | float(default=0) %} {% set vkbad1etg = states('sensor.varmekabel_bad1etg_electric_consumption_w') | float(default=0) %} {% set vkbad2etg = states('sensor.varmekabel_bad2etg_electric_consumption_w') | float(default=0) %} {% set vkgang = states('sensor.varmekabel_gang_electric_consumption_w') | float(default=0) %} {% set vkgmlstue = states('sensor.varmekabel_gmlstue_electric_consumption_w') | float(default=0) %} {% set vknystue = states('sensor.varmekabel_nystue_electric_consumption_w') | float(default=0) %} {% set vkkjokken = states('sensor.varmekabel_kjokken_electric_consumption_w') | float(default=0) %} {% set vvb = states('sensor.bryter_varmvannsbereder_electric_consumption_w') | float(default=0) %} {% set varmepumpe = states('sensor.strombryter_varmepumpe_power') | float(default=0) %} {% set easee = states('sensor.easee_home_13794_power') | float(default=0) %} {% set value = (powerload - vkbad1etg - vkbad2etg - vkgang - vkgmlstue - vknystue - vkkjokken - varmepumpe - vvb - easee) | round(1,default=0) %} {% if value < 0.0 %} {{ 0.0 }} {% else %} {{ value }} {% endif %} "number_of_deferrable_loads": 7 # Antall flyttbare laster (deferrable loads) jeg vil ha styring av "list_nominal_power_of_deferrable_loads": # Oppgis som en liste verdi med den nominelle lasten til de flyttbare lastene jeg har. Du finner disse verdien i dokumentasjon til lastene. Du må oppgi alle de syv lastene. "list_operating_hours_of_each_deferrable_load": # Oppgi i antall timer de flyttbare lastene skal være på. Jeg har valgt å bruke mpc optimalisering istedenfor Dayahead Optimization så disse tidene blir oppdatert hver 6 time med shell commands. Du må oppgi alle de syv lastene som i list_nominal_power_of_deferrable_loads "list_peak_hours_periods_start_hours": # Når skal oppvarmingen skje. Jeg har satt klokken 06:00. Du må oppgi alle de syv lastene som i list_nominal_power_of_deferrable_loads "list_peak_hours_periods_end_hours": # Når skal oppvarming avsluttes. Jeg har satt klokken 23:00. Du må oppgi alle de syv lastene som i list_nominal_power_of_deferrable_loads "list_treat_deferrable_load_as_semi_cont": # Jeg bruker true her. Du må oppgi alle de syv lastene som i list_nominal_power_of_deferrable_loads "load_peak_hours_cost": 0.1907 # Sett en statisk timeverdi mellom 06:00 - 23:00. Jeg bruker rest commands for å oppdatere dynamisk timeprisene så denne prisen blir overskrevet. "load_offpeak_hours_cost": 0.1419 # Sett en statisk timeverdi mellom 23:00 - 06:00. Jeg bruker et rest commands for å oppdatere dynamisk timeprisene så denne prisen blir overskrevet. "photovoltaic_production_sell_price": 0.065 # Sett en statisk kroneverdi. Jeg bruker et rest commands for å oppdatere dynamisk timeprisene så denne prisen blir overskrevet. "maximum_power_from_grid": 5310 # Mine solceller produserer teoretisk maksimum 5310 Watt "list_pv_module_model": # Her oppgis alle solcellepanelene "list_pv_inverter_model": # Her oppgis alle invertere. Jeg har mikroinvertere så det blir en del av dem. "list_surface_tilt" # Takvinkel. Du må oppgi takvinkel for alle solcellene "list_surface_azimuth": Azimuth grad. Du må oppgi azimuthvinkel for alle solcellene "list_modules_per_string": # Du må oppgi azimuthvinkel for alle solcellene "list_strings_per_inverter": # Du må oppgi azimuthvinkel for alle solcellene Resten av konfigurasjonsfilen ligger som vedlegg. Her er noen av rest commands jeg bruker for å oppdatere dynamisk timeprisene for load_cost_forecast og prod_price_forecast og hvor lenge lastene skal være på. Jeg legger ved resten av emhass oppsettet som en package fil https://www.home-assistant.io/docs/configuration/packages/. rest_command: trigger_nordpool_forecast: url: http://localhost:5000/action/dayahead-optim method: POST content_type: "application/json" timeout: 300 payload: >- { "load_cost_forecast":{{((state_attr('sensor.nordpool', 'raw_today') | map(attribute='value') | list + state_attr('sensor.nordpool', 'raw_tomorrow') | map(attribute='value') | list))[now().hour:][:24] }}, "prod_price_forecast":{{((state_attr('sensor.nordpool_uten_avgifter', 'raw_today') | map(attribute='value') | list + state_attr('sensor.nordpool_uten_avgifter', 'raw_tomorrow') | map(attribute='value') | list))[now().hour:][:24]}}, "def_total_hours":{{states('sensor.list_operating_hours_of_each_deferrable_load')}} } emhass_addon_config.json emhass.yaml Emhass automatiseringer for varmekabler. alias: "Emhass: Endre temperatur på varmekabel bad1etg. Sjekker hvert 5 minutt." description: "" trigger: - platform: time_pattern minutes: /5 condition: - condition: time after: "06:00:00" before: "23:00:00" action: - if: - condition: numeric_state entity_id: sensor.p_deferrable2 above: 0.1 then: - service: climate.set_temperature data: temperature: 23 hvac_mode: heat target: entity_id: - climate.varmekabel_bad1etg else: - service: climate.set_temperature data: temperature: 20 hvac_mode: heat target: entity_id: - climate.varmekabel_bad1etg mode: single Emhass automatisering for varmepumpe. alias: "Emhass: Endre temperatur på varmepumpe. Sjekker hvert 5 minutt." description: "" trigger: - platform: time_pattern minutes: /5 condition: - condition: state entity_id: binary_sensor.kontaktsensor_uteplassdor_contact state: "off" - condition: time after: "06:00:00" before: "23:00:00" action: - if: - condition: numeric_state entity_id: sensor.p_deferrable5 above: 0.1 then: - service: climate.set_temperature data: temperature: 23 hvac_mode: heat target: entity_id: - climate.varmepumpe else: - service: climate.set_temperature data: temperature: 22 hvac_mode: heat target: entity_id: - climate.varmepumpe mode: single Emhass automatisering for elbil ladning med Easee lader: alias: "Emhass: Slå av og på lading av elbil. Sjekker hvert 5 minutt." description: "" trigger: - platform: time_pattern minutes: /5 condition: [] action: - if: - condition: numeric_state entity_id: sensor.p_deferrable6 above: 0.1 then: - service: easee.set_circuit_dynamic_limit data: currentP1: 5 device_id: 4edada93978baf0956025a39acec389f else: - service: easee.set_circuit_dynamic_limit data: currentP1: 0 device_id: 4edada93978baf0956025a39acec389f mode: single 1 Quote
haraldov Posted October 7, 2023 Author Posted October 7, 2023 Min automatisering av day-ahead optimisering ser slik ut. Denne har jeg disablet da jeg bruker mpc optimisering så oppdaterer 6 timer i døgnet. Grunnen til det er at det er enklere å styre varmepumpe og elbilladning da. Skal en begynne med emhass ville jeg valgt day-ahead optimisering i starten. alias: EMHASS day-ahead optimization each day 13:55 description: "" trigger: - platform: time at: "13:55:00" condition: [] action: - service: rest_command.trigger_nordpool_forecast data: {} mode: single Hvis du ønsker oftere oppdatering av f.eks tider de flyttbare lastene skal være på kan du bruke mpc optimisering. F.eks trenger jeg å ha nattsenking på varmepumpen. Jeg bruker da en mpc automatisering klokken 00:00 hvor "def_total_hours": [2, 0, 0, 0, 0, 0, 2] ser slik ut. Varmepumpetid er i fet skrift i def_total_hours og er 0 timer i en seks timers periode. alias: "Emhass: Mpc optimisering klokken 00:00" description: "" trigger: - platform: time at: "00:00:00" condition: [] action: - service: rest_command.trigger_mpc_0000_forecast data: {} mode: single og en som trigger klokken 06:00 hvor "def_total_hours": [1, 1, 1, 1, 1, 5, 0] ser slik ut. Varmepumpetid er nå 5 timer på i en seks timers periode. Support for elbillading og varmepumpe er på todo listen til utvikleren David https://github.com/davidusb-geek/emhass/wiki Et tips på veien: Husk å teste ut rest command i template editor først. Det er lett at det blir feil med doble ticks (hermetegn ") og single ticks i template. Quote
thoralex Posted October 8, 2023 Posted October 8, 2023 (edited) Takk, det ser jo overkommelig ut. Har litt lite tid for tiden, men skal eksperimentere litt innimellom andre ting fremover. Blir vel noen spørsmål ettervert... Hvor/hvordan legger du inn rest commands for timesprisene? Prøvde å bare lime inn i feltet på konfigurasjonssiden, men det ble ikke godtatt... Jeg bruker Entso-e så jeg må nok "oversette" koden litt, men det tror jeg skal gå greit. En annen ting, hvordan håndterer emhass feil? Tenker spesielt om den ikke får strømpriser eller andre sensorer detter ut. Edit: og en ting til: Gjør emhass styring mot nettleietrinn, eller må det automatiseres utenom? Edit 2: Hva gjør man med deferrable loads som ikke har strømmåling når man beregner "power loads no var loads"? Og hva setter man som "nominal power of deferrable load" på f.eks. varmepumpe som har stor variasjon i forbruk? Min er gammel og dum og jeg ønsker i utgangspunktet bare å slå den på når jeg har overskudd av solstrøm, men da starter den på 2kw og går ned til 500w etter en liten stund. Edited October 8, 2023 by thoralex Quote
haraldov Posted October 8, 2023 Author Posted October 8, 2023 6 hours ago, thoralex said: Hvor/hvordan legger du inn rest commands for timesprisene? Jeg bruker rest commands til å sende timeprisene til emhass api. Du kan lese mer om rest kommandoer her: https://www.home-assistant.io/integrations/rest_command/ Du kan få problemer nå du kopierer disse kommandoene som jeg limer inn til template editor. Jeg har opplevd at Visual Studio Code endrer på anførselstegnene " "og single ticks slik at template edit og emhass ikke godtar kommandoene. Hvis du opplever det kan File editor være bedre å bruke da den ikke fikser på slike tegn. Dobbelsjekk derfor min kode med hva som står i template editor. Dette er et vanlig problem de feste sliter med. Du kan også bruke shell command https://www.home-assistant.io/integrations/shell_command/ istedenfor rest commands. Fordelen med rest command er at den gir mere tilbakemelding i loggen. I emhass dokumentasjonen er det et eksempel hvordan bruke shell kommand til å legge inn timepriser fra Nordpool https://emhass.readthedocs.io/en/latest/forecasts.html#passing-your-own-forecast-data. Entsoe går fint også men test i template editor først før du sender data til emhass. rest_command: ml_forecast_fit: url: http://localhost:5000/action/forecast-model-fit method: POST content_type: "application/json" timeout: 300 payload: >- { "days_to_retrieve": 60, "num_lags": 24 } ml_forecast_tune: url: http://localhost:5000/action/forecast-model-tune method: POST content_type: "application/json" timeout: 300 payload: >- { } trigger_nordpool_forecast: url: http://localhost:5000/action/dayahead-optim method: POST content_type: "application/json" timeout: 300 payload: >- { "load_cost_forecast":{{((state_attr('sensor.nordpool', 'raw_today') | map(attribute='value') | list + state_attr('sensor.nordpool', 'raw_tomorrow') | map(attribute='value') | list))[now().hour:][:24] }}, "prod_price_forecast":{{((state_attr('sensor.nordpool_uten_avgifter', 'raw_today') | map(attribute='value') | list + state_attr('sensor.nordpool_uten_avgifter', 'raw_tomorrow') | map(attribute='value') | list))[now().hour:][:24]}}, "def_total_hours":{{states('sensor.list_operating_hours_of_each_deferrable_load')}} } publish_data: url: http://localhost:5000/action/publish-data method: POST content_type: "application/json" timeout: 300 payload: >- {"custom_deferrable_forecast_id": [ {"entity_id": "sensor.p_deferrable0","unit_of_measurement": "W", "friendly_name": "Varmtvannsbereder"}, {"entity_id": "sensor.p_deferrable1","unit_of_measurement": "W", "friendly_name": "Varmekabel stue og kjøkken"}, {"entity_id": "sensor.p_deferrable2","unit_of_measurement": "W", "friendly_name": "Varmekabel bad1etg"}, {"entity_id": "sensor.p_deferrable3","unit_of_measurement": "W", "friendly_name": "Varmekabel bad2etg"}, {"entity_id": "sensor.p_deferrable4","unit_of_measurement": "W", "friendly_name": "Varmekabel gang"}, {"entity_id": "sensor.p_deferrable5","unit_of_measurement": "W", "friendly_name": "Varmepumpe"}, {"entity_id": "sensor.p_deferrable6","unit_of_measurement": "W", "friendly_name": "Easee lader"} ]} trigger_mpc_0600_forecast: url: http://localhost:5000/action/naive-mpc-optim method: POST content_type: "application/json" timeout: 300 payload: >- { "load_cost_forecast":{{((state_attr('sensor.nordpool', 'raw_today') | map(attribute='value') | list + state_attr('sensor.nordpool', 'raw_tomorrow') | map(attribute='value') | list))[now().hour:][:24] }}, "prod_price_forecast":{{((state_attr('sensor.nordpool_uten_avgifter', 'raw_today') | map(attribute='value') | list + state_attr('sensor.nordpool_uten_avgifter', 'raw_tomorrow') | map(attribute='value') | list))[now().hour:][:24]}}, "def_total_hours": [1, 1, 1, 1, 1, 5, 0], "prediction_horizon": 6 } trigger_mpc_1200_forecast: url: http://localhost:5000/action/naive-mpc-optim method: POST content_type: "application/json" timeout: 300 payload: >- { "load_cost_forecast":{{((state_attr('sensor.nordpool', 'raw_today') | map(attribute='value') | list + state_attr('sensor.nordpool', 'raw_tomorrow') | map(attribute='value') | list))[now().hour:][:24] }}, "prod_price_forecast":{{((state_attr('sensor.nordpool_uten_avgifter', 'raw_today') | map(attribute='value') | list + state_attr('sensor.nordpool_uten_avgifter', 'raw_tomorrow') | map(attribute='value') | list))[now().hour:][:24]}}, "def_total_hours": [2, 0, 0, 0, 0, 3, 1], "prediction_horizon": 6 } trigger_mpc_1800_forecast: url: http://localhost:5000/action/naive-mpc-optim method: POST content_type: "application/json" timeout: 300 payload: >- { "load_cost_forecast":{{((state_attr('sensor.nordpool', 'raw_today') | map(attribute='value') | list + state_attr('sensor.nordpool', 'raw_tomorrow') | map(attribute='value') | list))[now().hour:][:24] }}, "prod_price_forecast":{{((state_attr('sensor.nordpool_uten_avgifter', 'raw_today') | map(attribute='value') | list + state_attr('sensor.nordpool_uten_avgifter', 'raw_tomorrow') | map(attribute='value') | list))[now().hour:][:24]}}, "def_total_hours": [2, 1, 1, 1, 1, 3, 1], "prediction_horizon": 6 } trigger_mpc_0000_forecast: url: http://localhost:5000/action/naive-mpc-optim method: POST content_type: "application/json" timeout: 300 payload: >- { "load_cost_forecast":{{((state_attr('sensor.nordpool', 'raw_today') | map(attribute='value') | list + state_attr('sensor.nordpool', 'raw_tomorrow') | map(attribute='value') | list))[now().hour:][:24] }}, "prod_price_forecast":{{((state_attr('sensor.nordpool_uten_avgifter', 'raw_today') | map(attribute='value') | list + state_attr('sensor.nordpool_uten_avgifter', 'raw_tomorrow') | map(attribute='value') | list))[now().hour:][:24]}}, "def_total_hours": [2, 0, 0, 0, 0, 0, 2], "prediction_horizon": 6 } 6 hours ago, thoralex said: hvordan håndterer emhass feil? Tenker spesielt om den ikke får strømpriser eller andre sensorer detter ut. Når Rest kommandoer ikke får tilbakemelding om at alt er ok fra emhass server logger den til Home Assistant loggen mener jeg. Dette er grunnen til at jeg bruker rest kommandoer istedenfor shell kommand som brukes i dokumentasjonen. Så hvis strømpriser ikke oppdateres får du en melding i loggen. Hvis andre sensorer detter ut får du meldinger av Home Assistant i loggen. Emhass addon logger til sin egen logg som du kan finne i Settings->System->Logs. Du kan søke i den etter error eller warning. 6 hours ago, thoralex said: Gjør emhass styring mot nettleietrinn, eller må det automatiseres utenom? Dette må automatiseres utenom. 1) Du kan f.eks bruke PowerWiz til dette: https://theawesomegarage.com/blog/powerwiz-for-home-assistant-control-your-power . Har ikke prøvd det selv, men ser lovende ut 2) Du kan også bruke Home Assistant automatisering som du ser her: https://github.com/kimmilde/home-assistant 3) Du kan også bruke et Pyscript https://github.com/custom-components/pyscript som Stigvi har laget. Du finner mer om dette her: 7 hours ago, thoralex said: Hva gjør man med deferrable loads som ikke har strømmåling når man beregner "power loads no var loads"? Du må nok ha strømmåling. Jeg bruker en Fibaro wallplug på varmepumpen, en Aeotec Heavy Duty Switch til varmtvannsberederen. 7 hours ago, thoralex said: Og hva setter man som "nominal power of deferrable load" på f.eks. varmepumpe som har stor variasjon i forbruk? Er ikke noe ekspert på dette, men jeg mener nominell effekt er den høyeste wattstyrken som varmepumpen kan oppnå. Dette kan du finne i manualen eller bruke en strømplugg til å måle den høyeste effekten varmepumpen har. Det er iallefall det jeg setter inn for min varmepumpe som har nominell effekt på 3000 Watt - nominal_power_of_deferrable_loads: 3000 2 Quote
thoralex Posted October 8, 2023 Posted October 8, 2023 Takk for hjelpen så langt! Quote Jeg bruker rest commands til å sende timeprisene til emhass api. Jeg er nok fortsatt på "home assistant for dummies"-nivået... Problemet jeg hadde med rest var at jeg puttet dem på feil sted i configurations.yaml, tror det er løst nå. Quote Du må nok ha strømmåling. Varmekabeltermostaten har bare en sensor som regner ut "mean power last 10 minutes" basert på effekten man har lagt inn. I mitt hode er ikke det brukbart som strømmåling så jeg glemte at den fantes, men jeg har lagt den inn så får vi se om det er godt nok. Quote Er ikke noe ekspert på dette, men jeg mener nominell effekt er den høyeste wattstyrken som varmepumpen kan oppnå Fant en kommentar i tråden på HA community som bekreftet det. Problemet jeg har nå er at den ikke godtar inverteren: "Ningbo_Ginlong_Technologies_Co_0_Ltd_Solis_15K_US" Var den eneste 15kw Solis inverteren i lista, usikker på om det er formateringen min betegnelsen som er feil eller om det er noe annet. 2023-10-08 17:47:53,908 - web_server - ERROR - Exception on /action/dayahead-optim [POST] Traceback (most recent call last): File "/usr/local/lib/python3.9/dist-packages/pandas/core/indexes/base.py", line 3621, in get_loc return self._engine.get_loc(casted_key) File "pandas/_libs/index.pyx", line 136, in pandas._libs.index.IndexEngine.get_loc File "pandas/_libs/index.pyx", line 163, in pandas._libs.index.IndexEngine.get_loc File "pandas/_libs/hashtable_class_helper.pxi", line 5198, in pandas._libs.hashtable.PyObjectHashTable.get_item File "pandas/_libs/hashtable_class_helper.pxi", line 5206, in pandas._libs.hashtable.PyObjectHashTable.get_item KeyError: 'Ningbo_Ginlong_Technologies_Co_0_Ltd_Solis_15K_US' The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/usr/local/lib/python3.9/dist-packages/flask/app.py", line 2190, in wsgi_app response = self.full_dispatch_request() File "/usr/local/lib/python3.9/dist-packages/flask/app.py", line 1486, in full_dispatch_request rv = self.handle_user_exception(e) File "/usr/local/lib/python3.9/dist-packages/flask/app.py", line 1484, in full_dispatch_request rv = self.dispatch_request() File "/usr/local/lib/python3.9/dist-packages/flask/app.py", line 1469, in dispatch_request return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) File "/usr/local/lib/python3.9/dist-packages/emhass/web_server.py", line 179, in action_call input_data_dict = set_input_data_dict(config_path, str(data_path), costfun, File "/usr/local/lib/python3.9/dist-packages/emhass/command_line.py", line 90, in set_input_data_dict P_PV_forecast = fcst.get_power_from_weather(df_weather) File "/usr/local/lib/python3.9/dist-packages/emhass/forecast.py", line 418, in get_power_from_weather inverter = cec_inverters[self.plant_conf['inverter_model'][i]] File "/usr/local/lib/python3.9/dist-packages/pandas/core/frame.py", line 3505, in __getitem__ indexer = self.columns.get_loc(key) File "/usr/local/lib/python3.9/dist-packages/pandas/core/indexes/base.py", line 3623, in get_loc raise KeyError(key) from err KeyError: 'Ningbo_Ginlong_Technologies_Co_0_Ltd_Solis_15K_US' Har stilt spørsmålet i tråden på HA community så vi får se om noen har en løsning. Quote
haraldov Posted October 8, 2023 Author Posted October 8, 2023 Emhass bruker pvlib biblioteket for å gjøre spørringer om inverter. Her er databasen som en csv fil du kan søke i: https://github.com/NREL/SAM/blob/develop/deploy/libraries/CEC Inverters.csv Se om du finner en inverter som passer med din egen og bruk den. https://community.home-assistant.io/t/emhass-an-energy-management-for-home-assistant/338126/51?u=haraldov pvlib.pvsystem.retrieve_sam https://pvlib-python.readthedocs.io/en/stable/reference/generated/pvlib.pvsystem.retrieve_sam.html Emhass bruker inverter- og solcelle-data og forecast fra værtjeneste til å spå "pv power production forecast" for neste dag. PV power production forecast (internally based on the weather forecast and the characteristics of your PV plant). This is given in Watts. https://emhass.readthedocs.io/en/latest/intro.html#passing-your-own-data Du kan alternativt bruke data fra Solcast https://solcast.com/ eller Forecast Solar https://www.home-assistant.io/integrations/forecast_solar/ og sende disse data til emhass med rest kommando. De vil overstyre den interne "pv power production forecast" Quote
torsteint Posted December 9, 2023 Posted December 9, 2023 Gøy å se at andr også bruker emhass. Har brukt mange timer på og klare og forstå helt hvordan den fungerer. Brukte day ahead da det var anbefalt fra emhass men fikk det aldri til og fungere bra før jeg byttet til mpc. Har en masse node red flows for og styre varmtvann og elbil lading. Fungerer best sammen med solcast. Lurer litt på om noen har studert på hvordan det kan være lurt og styre vannbåren varme system. Tenker og kunne bygge større varmtvannsbereder som kan brukes som batteri for oppvarming.? Quote
haraldov Posted December 11, 2023 Author Posted December 11, 2023 Vannbåren varmesystem er en flyttbar last så i utgangspunktet kan emhass brukes til å styre varmen. Jeg bruker emhass til oppvarming av varmtvannsbereder noe som også gjøres ved vannbåren varmesystem. Du tenker kanskje på å bygge et blått batteri istedenfor et husbatteri. Leste litt om dette her før monterte solceller: https://solcellekysten.no/2016/09/24/energistyring/ Quote
torsteint Posted December 21, 2023 Posted December 21, 2023 Stemmer, pr dags dato gjør jeg det samme, men det er mange kw og spare lithium batteriene for ved og bygge en litt større varmtvannstank og bruke denne som batteri for oppvarming gjennom døgnet. Er det noen her som har studert ml forcast? Quote
haraldov Posted December 21, 2023 Author Posted December 21, 2023 Er ikke sikker på om jeg svarer på spørsmålet ditt, men her hvordan jeg bruker mlforecast i emhass. Jeg bruker ml forecast i emhass med default verdier (https://emhass.readthedocs.io/en/latest/mlforecaster.html) bortsett fra at jeg bruker "days_to_retrieve" = 10 i rest kommandoene for å spesifisere 10 dager med sensordata som mlforecast skal hente ut i fra homeassistant databasen. Dette er data fra "sensor.power_load_no_var_loads". Skal helst være flere dager enn dette. Jeg bruker også i "num_lags" = 24 (tilsvarer 24 timer i døgnet) da jeg bruker nordpool data som har strømpriser for hver time. rest_command: ml_forecast_fit: url: http://localhost:5000/action/forecast-model-fit method: POST content_type: "application/json" timeout: 300 payload: >- { "days_to_retrieve": 10, "num_lags": 24 } ml_forecast_tune: url: http://localhost:5000/action/forecast-model-tune method: POST content_type: "application/json" timeout: 300 payload: >- { } Kjører hver uke denne automatiseringen for å oppdatere mlforecast fit: alias: EMHASS ml forecaster model fit each sunday 23:05 description: "" trigger: - platform: time at: "23:05:00" condition: - condition: time weekday: - sun action: - service: rest_command.ml_forecast_fit data: {} mode: single og deretter ml forecast tune: alias: EMHASS ml forecaster model tune each sunday 23:15 description: "" trigger: - platform: time at: "23:15:00" condition: - condition: time weekday: - sun action: - service: rest_command.ml_forecast_tune data: {} mode: single I loggen ser det slik ut etter å ha kjørt mlforecast automatiseringen. 2023-12-21 17:29:24,348 - web_server - INFO - Setting up needed data 2023-12-21 17:29:24,461 - web_server - INFO - Retrieve hass get data method initiated... 2023-12-21 17:29:57,908 - web_server - INFO - >> Performing a machine learning forecast model fit... 2023-12-21 17:29:57,910 - web_server - INFO - Performing a forecast model fit for load_forecast 2023-12-21 17:29:57,930 - web_server - INFO - Training a KNeighborsRegressor model 2023-12-21 17:29:58,042 - web_server - INFO - Elapsed time for model fit: 0.11151599884033203 2023-12-21 17:29:58,128 - web_server - INFO - Prediction R2 score of fitted model on test data: -0.333963984019525 2023-12-21 17:30:00,257 - web_server - INFO - Setting up needed data 2023-12-21 17:30:00,265 - web_server - INFO - >> Publishing data... 2023-12-21 17:30:00,265 - web_server - INFO - Publishing data to HASS instance 2023-12-21 17:30:00,330 - web_server - INFO - Successfully posted to sensor.p_pv_forecast = -6.44 2023-12-21 17:30:00,375 - web_server - INFO - Successfully posted to sensor.p_load_forecast = 1917.72 2023-12-21 17:30:00,407 - web_server - INFO - Successfully posted to sensor.p_deferrable0 = 1964.0 2023-12-21 17:30:00,437 - web_server - INFO - Successfully posted to sensor.p_deferrable1 = -5331.21 2023-12-21 17:30:00,466 - web_server - INFO - Successfully posted to sensor.p_deferrable2 = 2193.0 2023-12-21 17:30:00,499 - web_server - INFO - Successfully posted to sensor.p_deferrable3 = 0.0 2023-12-21 17:30:00,528 - web_server - INFO - Successfully posted to sensor.p_deferrable4 = 1450.0 2023-12-21 17:30:00,564 - web_server - INFO - Successfully posted to sensor.p_deferrable5 = 0.0 2023-12-21 17:30:00,592 - web_server - INFO - Successfully posted to sensor.p_deferrable6 = 3110.06 2023-12-21 17:30:00,621 - web_server - INFO - Successfully posted to sensor.p_grid_forecast = 5310.0 2023-12-21 17:30:00,646 - web_server - INFO - Successfully posted to sensor.total_cost_fun_value = -202.03 2023-12-21 17:30:00,671 - web_server - INFO - Successfully posted to sensor.optim_status = Infeasible 2023-12-21 17:30:00,702 - web_server - INFO - Successfully posted to sensor.unit_load_cost = 1.4 2023-12-21 17:30:00,734 - web_server - INFO - Successfully posted to sensor.unit_prod_price = 0.065 2023-12-21 17:30:31,107 - web_server - INFO - Setting up needed data 2023-12-21 17:30:31,117 - web_server - INFO - Retrieve hass get data method initiated... 2023-12-21 17:31:00,751 - web_server - INFO - >> Performing a machine learning forecast model tune... 2023-12-21 17:31:00,757 - web_server - INFO - Bayesian hyperparameter optimization with backtesting Number of models compared: 70, 10 bayesian search in each lag configuration. lags grid: 0%| | 0/7 [00:00<?, ?it/s] lags grid: 14%|█▍ | 1/7 [00:09<00:59, 9.97s/it] lags grid: 29%|██▊ | 2/7 [00:11<00:25, 5.17s/it] lags grid: 43%|████▎ | 3/7 [00:13<00:14, 3.58s/it] lags grid: 57%|█████▋ | 4/7 [00:15<00:08, 2.84s/it] lags grid: 71%|███████▏ | 5/7 [00:16<00:04, 2.40s/it] lags grid: 86%|████████▌ | 6/7 [00:18<00:02, 2.24s/it] lags grid: 100%|██████████| 7/7 [00:20<00:00, 2.05s/it] lags grid: 100%|██████████| 7/7 [00:20<00:00, 2.91s/it] 2023-12-21 17:31:21,247 - web_server - INFO - Elapsed time: 20.490362644195557 2023-12-21 17:31:21,355 - web_server - INFO - R2 score for optimized prediction in train period: -0.30239850496571674 2023-12-21 17:31:21,362 - web_server - INFO - R2 score for optimized prediction in test period: -0.08380513951771618 2023-12-21 17:31:21,362 - web_server - INFO - Number of optimal lags obtained: 48 I Emhass konfigurasjonen endrer du fra naive til mlforecast. Kjør deretter automatiseringen for day-ahead forecast optimisering. For mitt vedkommende er det å kjøre rest kommandoen: alias: EMHASS day-ahead optimization description: "" trigger: - platform: time at: "13:45:00" condition: [] action: - service: rest_command.trigger_tibber_forecast data: {} mode: single Loggen ser slik ut i emhass hvis alt går bra. 2023-12-21 17:34:21,698 - web_server - INFO - Setting up needed data 2023-12-21 17:34:21,710 - web_server - INFO - Retrieving weather forecast data using method = scrapper 2023-12-21 17:34:29,123 - web_server - INFO - Retrieving data from hass for load forecast using method = mlforecaster 2023-12-21 17:34:29,124 - web_server - INFO - Retrieve hass get data method initiated... 2023-12-21 17:34:56,966 - web_server - INFO - >> Performing dayahead optimization... 2023-12-21 17:34:56,967 - web_server - INFO - Performing day-ahead forecast optimization 2023-12-21 17:34:57,005 - web_server - INFO - Perform optimization for the day-ahead 2023-12-21 17:34:57,133 - web_server - INFO - Status: Infeasible 2023-12-21 17:34:57,133 - web_server - INFO - Total value of the Cost function = -138.77 Quote
torsteint Posted December 22, 2023 Posted December 22, 2023 takk for svar, jeg vet ikke helt om jeg forstår formålet med denne? Quote
stigvi Posted December 22, 2023 Posted December 22, 2023 torsteint skrev (1 time siden): takk for svar, jeg vet ikke helt om jeg forstår formålet med denne? Sitat EMHASS (Energy Management for Home Assistant) is an optimization tool designed for residential households. The package uses a Linear Programming approach to optimize energy usage while considering factors such as electricity prices, power generation from solar panels, and energy storage from batteries. Quote
torsteint Posted December 22, 2023 Posted December 22, 2023 men når du kjører en mpc optim etterpå forsvinner vel alt fra ml forcast. det jeg ikke forstår. Quote
haraldov Posted December 23, 2023 Author Posted December 23, 2023 Nei, machine learning forecast (ml forecast) av ditt historiske strømforbruk vil ikke forsvinne. ml forecast data lagres og brukes når du bruker mpc til å optimere den beste strømsparing. Model Predictive Control (mpc) eller day-ahead optimisering kan bruke forecast data om historisk strømforbruk (naive eller ml forecast data), strømproduksjon fra solceller, strømpris for salg av solcellestrøm og kjøp av importert strøm til å lage en 24 timers forecast av hvilke tidspunkter det er best å bruke eller spare strøm. Håper dette hjelper. Quote
haraldov Posted January 4 Author Posted January 4 For 3 hours ago, torsteint said: Skjønner, er det noe og hente på dette da? Forfatter av programmet mener at en kan spare 5 % og 8% daglig med lineær optimisering enn å bruke en regel basert fremgangsmåte. Kilde: https://community.home-assistant.io/t/emhass-an-energy-management-for-home-assistant/338126 Men det blir likevel ikke mye i kroner på å spare strøm (ENØK tiltak) når vi har tidenes beste strømstøtte https://www.nrk.no/norge/xl/de-som-tjener-best_-fikk-mest-stromstotte-1.16638845 Quote
torsteint Posted January 5 Posted January 5 Ja det stemmer. Jeg har lagt inn prislisten i emhass etter strøm støtte slik at batteriene ikke lades inn og ut uten gevinst nå. Quote
torsteint Posted June 26 Posted June 26 Spørsmål. Ser de skriver days to retreave feks 1år. Det er veldig lenge og samle i home assistant. Men du samler for 10 dager. Det står også at man trener en modell som er en csv til her. Er det ikke da mulig å sette opp trening på feks 2 år tilbake med bare 10 dager fra ha? Quote
haraldov Posted June 28 Author Posted June 28 Minimum dager for "machine learning forecaster" er 9 dager med strømdata. Men som utvikleren skriver så blir det mer nøyaktig med flere dager med data. Quote Note The minimum number of days_to_retrieve is hard coded to 9 by default. But it is adviced to provide more data for better accuracy by modifying your Home Assistant recorder settings. Jeg bruker Tibber Pulse for å registere effekt dvs "sensor.tibber_pulse_hjemmeadresse_power". Problemet er som du skriver at ett år med data vil bli enorme mengder med data skrevet til filen home-assistant_v2.db. Jeg bruker filter i recorder https://www.home-assistant.io/integrations/recorder/ for å prøve å logge minst mulig data, men ett år gikk ikke. Så nå bruker jeg 10 dager med data og filtrer uønskede sensor data. Dette gir fortsatt en del data for å bruke maskin læring, men fungerer fint hvis du ikke ønsker enda mere nøyaktighet. Alternativet er jo å bruke en databaseserver som Maria db, men jeg ønsker KISS prinsippet (Keep it simple and stupid) eller bare droppe å bruke maskinlæring. Jeg spurte utvikler om man kunne bruke statistics data (e.g. energy data) da dette tar ikke så stor plass, men han skrev at emhass trengte Wattdata fra Pulse. Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.