HomeAssistant ja sähköpörssiohjaus

heebo1974

Jäsen
Onkohan muuten muilla ollut havaintoja semmoisesta, että tänään olisi jäänyt HomeAssistanttiin tulematta huomisen hinnat?

Minulle kävi noin tänään ja tulkkasin niin, että Mikin API:sta tuli 14:08:11 25kpl hintoja haulla "TodayAndDayForward". Tekemäni päivityslogiikka tulkitsee kaikki >24kpl hintoja tilanteeksi, että on saatu haettua huomisen hinnat. Ehkä tätä pitää viilata.
Näin muuten taisi käydä. Manuaalisesti ajelin joskus neljän jälkeen uudelleen.
 

aNT7I

Jäsen
Kiitos tästä hienosta paketista. Hieman kehittelin tuossa, josko olisin saanut KSS-sähkön monimutkaisen kausisähkön siirtomaksut mukaan tähän kokonaisuuteen. Eli riippuu ihan kellonajasta talvella, mikä hinta on. Pahoittelen, tulee pitkä selitys. Lopussa pari kyssäriä/huomiota.
Screenshot 2023-01-15 203537.jpg

Itsellä sitä varten oli jo tämmöinen sensori käytössä, jolla sitten syöttelin Energia-kojelautaan yhdessä vastaavanlaisen energiataksa sensorin kanssa.
{% set t = {'winter_day': 4.55,
'other_time': 1.38,
'maint_perf': 0.0161,
'ex_tax': 2.7776} %}
{% if now().month >= 4 and now().month <11 %}{{t.other_time+t.maint_perf+t.ex_tax|float}}
{% else %}
{% if now().isoweekday() <= 6 %}
{% if now().hour >=7 and now().hour <22 %}
{{t.winter_day+t.maint_perf+t.ex_tax|float}}
{% else %}
{{t.other_time+t.maint_perf+t.ex_tax|float}}
{% endif %}
{% elif now().isoweekday() == 7 %}
{{t.other_time+t.maint_perf+t.ex_tax|float}}
{% else %}
{{0}}
{% endif %}
{% endif %}

Nuo nyt mukana olevat shf_price1- ja shf_price2-numerosyöttäjät eivät ihan riitä tuohon KSS:n monimutkaiseen, niin yhdistelemällä ja apinoimalla muokkasin tuon electricity_price_now all_prices-koodin (rivit 46-55) vastaamaan tota aiempaa sensoriani.

For loopissa vertailaan sitä arrayssa olevaa aikaleimaa ja sen mukaan tulee hinta.
Laitoin vielä ylimmälle tasolle input_booleanin, että se käyttää tuota minun tekelettäni tai alkuperäistä price1/price2-koodia.
Lisäksi tein muutaman helpperin lisää, jolla annetaan nuo siirtomaksuun vaikuttavat arvot vaikka UI:ssä.

Hard koodasin kuukaudet ja kellonajat, ainakin vielä, tuonne koodiin.

all_prices: >
{% if is_state('input_boolean.shf_season_tariff','on') %}
{% set output = namespace(value=[]) %}
{% for value in (state_attr("sensor.shf_electricity_price_now", "data")) | map(attribute="PriceWithTax") | list %}
{% set t = {'winter_day': states('input_number.shf_price_slider_winterday')|float,
'other_time': states('input_number.shf_price_slider_othertime')|float,
'maint_perf': states('input_number.shf_price_slider_maint_assur')|float/100,
'ex_tax': states('input_number.shf_price_slider_ex_tax')|float,
'margin': states('input_number.shf_price_slider_margin')|float } %}

{% if as_datetime(state_attr("sensor.shf_electricity_price_now", "data")[loop.index-1].DateTime).month >= 4 and as_datetime(state_attr("sensor.shf_electricity_price_now", "data")[loop.index-1].DateTime).month <11 %}
{% set output.value = output.value + [ value + t.other_time+t.maint_perf+t.ex_tax+t.margin | float] %}
{% else %}
{% if as_datetime(state_attr("sensor.shf_electricity_price_now", "data")[loop.index-1].DateTime).isoweekday() <= 6 %}
{% if as_datetime(state_attr("sensor.shf_electricity_price_now", "data")[loop.index-1].DateTime).hour >=7 and as_datetime(state_attr("sensor.shf_electricity_price_now", "data")[loop.index-1].DateTime).hour <22 %}
{% set output.value = output.value + [ value + t.winter_day+t.maint_perf+t.ex_tax+t.margin | float] %}
{% else %}
{% set output.value = output.value + [ value + t.other_time+t.maint_perf+t.ex_tax+t.margin | float] %}
{% endif %}
{% elif as_datetime(state_attr("sensor.shf_electricity_price_now", "data")[loop.index-1].DateTime).isoweekday() == 7 %}
{% set output.value = output.value + [ value + t.other_time+t.maint_perf+t.ex_tax+t.margin | float] %}
{% else %}
{{0}}
{% endif %}
{% endif %}
{%endfor %}
{% else %}
{% set output = namespace(value=[]) %}
{% for value in (state_attr("sensor.shf_electricity_price_now", "data")) | map(attribute="PriceWithTax") | list %}
{% if ((loop.index - 1) % 24) >= state_attr("input_datetime.shf_price2_start", "hour") and ((loop.index - 1) % 24) < state_attr("input_datetime.shf_price2_stop", "hour") %}
{% set output.value = output.value + [ value + states('input_number.shf_price2_slider') | float] %}
{% else %}
{% set output.value = output.value + [ value + states('input_number.shf_price1_slider') | float] %}
{% endif %}
{% endfor %}
{% endif %}
{{ output.value if output.value | length > 0 else state_attr("sensor.shf_electricity_price_now", "all_prices") }}

Kaikki näyttäisi minusta toimivan ok. (Tai kaikki paitsi tuon Apexchartin otsikko näemmä.)
En ihan tarkaan kammannut läpi, että uusihinta on "alkuperäinen pörssihinta" + "ajakohdan siirtomaksu." Ainakin tuolla kehittäjän työkaluissa kaikki näytti vielä hyvältä, kun tarkkailin mitä siirtomaksua se arrayhin aina syöttää. :)

Screenshot 2023-01-15 2100.jpg


Sitten ne kysymykset/huomiot.
Ilmeisesti tuo voisi olla oikea kohta koodissa tehdä tuo muutos? Siihenhän tuo alkuperäinen koodi myös sijoittaa "lisämaksut?" Lähinnä niin, että Control Factorin laskennat menee niiden lisämaksujen kanssa.

Mutta, oli tavoitteena myös hyödyntää tuota Rank:iä tämän pohjalta, mutta sehän tuleekin api:sta ja ei huomioi näitä annettuja lisämaksuja. :hmm:
 
Viimeksi muokattu:

Temez

Aktiivinen jäsen
@Temez et ole harkinnut että saisi tuonne HACSin alle tätä spotprices2ha:ta ? saisi pävitykset kätevästi
Hmmm, ei ole tullut aiemmin mieleen. Kysymysmerkki ehkä se, että saako sillä edes jaettua tämmöisiä konffipätkiä? En siis itse tiedä ja pohdin, että pystyykö. Sivuilla ei mainita minusta, että tämmöisen konffipätkän julkaisu sinne olisi mahdollista: https://hacs.xyz/docs/publish/start
 

Temez

Aktiivinen jäsen
Sitten ne kysymykset/huomiot.
Ilmeisesti tuo voisi olla oikea kohta koodissa tehdä tuo muutos? Siihenhän tuo alkuperäinen koodi myös sijoittaa "lisämaksut?" Lähinnä niin, että Control Factorin laskennat menee niiden lisämaksujen kanssa.
Jos haluat muokata koodia, niin onnistunee varmaan noin ihan hyvin. En koodia nyt sen tarkemmin katsonut, kun en varmasti nyt tähän aikaan ilta-aivoilla osaisi siitä mitään erityisiä huomioita tehdäkään. Toinen vaihtoehtoinen ratkaisutapa olisi varmaan tehdä automaatio, joka käynnistyy tiettyinä ajanhetkinä ja vaihtaa SHF Price 1:sen ja SHF Price 2:sen arvoja. Näin sinun ei tarvitsi sitten jatkossa tehdä leikkaa&liimaa&yhdistele -toimenpiteitä, kun tulee uusi versio tästä paketista.

Tietyllä tapaa tekisi mieli yhdistää tuo kausisähkö myös tähän pakettiini, mutten nyt uskalla sitä luvata.
Mutta, oli tavoitteena myös hyödyntää tuota Rank:iä tämän pohjalta, mutta sehän tuleekin api:sta ja ei huomioi näitä annettuja lisämaksuja. :hmm:
Totta, näinhän se on! Mikillä oli jotain siirtohintoja toteutettuna suoraan APIin, jolloin riittäisi haettavan urlin muuttaminen. Mutta voisin ehkä tuon Rankin laskemisen tehdä tässä lisäosan puolella, niin sitten saisi nuo kaikki erilaiset "siirtohintavariaatiot" mukaan.
 

aNT7I

Jäsen
Juu. En aatellutkaan, että kukaan lähtee debuggaamaan tuota sytöstäni. :)

Mietin tuota automaatiovaihtoehtoa, mutta kivat kuvaajat menee sitten hieman vinoon, kun kaikki menneet hinnat hyppääkin klo. 22 yö-tariffin mukaiseksi. :D

Mutta tuo Rankin uudelleen laskenta lisäosan puolella olisi ihan oiva lisä. Toki voi kuulostella, että käyttäisikö sitä kukaan muu. Onnistun toki tekemään sen itse itsellekin, vaikka olen tämän HA:n koodin syntaksin kanssa välilä todella hukassa.
 

aNT7I

Jäsen
Pahoittelen, tämä on jo saivartelun tasoa. :) Mutta satuin ihmetelemään miksi cheapest period start antoi kolmelle tunnille eri tuloksen kuin yksi oma koodin pätkäni. Mutta jos rivillä 91 jättää tuon round(3):n tekemättä, niin halvin jakso hyppää ensi yönä 0200 -> 0300.

Erohan on loppujen lopuksi häviävän pieni, mutta toisaalta sensorin lopputulemana näytetään aikaleima, niin pyöristystäkään ei kai tarvi?
Kyllä tietokoneisiin numeroita mahtuu. ;)
 

jämä67

Aktiivinen jäsen
Olisiko kuinka vaikea tekijämiehelle lisätä sensori listaan "Lämpöpumpulla tuotetun energian hinta nyt" ja olisiko siitä muille iloa?
Huomitoitaisiin siis ulkolämpötila ja pumpun COP eri lämpötiloissa.

Itsellä ajatus vaihtaa suoraviivaisesti lämmönlähdettä VILP/ÖLJY välillä sen mukaan kummalla seuraava tunti halvempi.
Uunia lämmittäessäkin olen nyt pörssisähkön aikaan koittanut vähän katsoa tuleeko klapit halvemmaksi, kun lämpöpumpulla tuotettu energia.
Varsinkin, jos siitä olisi vastaava graafi kun sähkön hinnasta, niin näkisi yhdellä silmäyksellä onko turha tuhlata puita.

-Sähkön hinta tiedossa
-FMI lämpötilaennuste tiedossa
-COP laskenta täytyisi tehdä jossain ja antaa/syöttää cop arvot johonkin.

@Temez , laitoit jo taannoin Jinja2 koodia lämmitystavan valintaan liittyen toiseen keskusteluun. Se on vähän turhan hieno omaan käyttöön,
kun siinä mukana sitä lämmitystarpeen arviointia. Koitin Developer Tools editorilla sitä soveltaakin pelkkään COP laskentan, mutta ei taidot riitä. Onko koodissa COP laskettu jotenkin -15 ja +7 arvojen kulmakertoimen perusteella eri lämpötiloille?
 

Temez

Aktiivinen jäsen
Pahoittelen, tämä on jo saivartelun tasoa. :) Mutta satuin ihmetelemään miksi cheapest period start antoi kolmelle tunnille eri tuloksen kuin yksi oma koodin pätkäni. Mutta jos rivillä 91 jättää tuon round(3):n tekemättä, niin halvin jakso hyppää ensi yönä 0200 -> 0300.

Erohan on loppujen lopuksi häviävän pieni, mutta toisaalta sensorin lopputulemana näytetään aikaleima, niin pyöristystäkään ei kai tarvi?
Kyllä tietokoneisiin numeroita mahtuu. ;)
Kiitos havainnosta, pitääkin tarkistaa tuo asia sopivan hetken tullen. Hinnathan ovat kuitenkin tuolta Mikin API:sta neljän desimaalin tarkkuudella, joten joku käpy tuossa päässä käynyt.

@Temez , laitoit jo taannoin Jinja2 koodia lämmitystavan valintaan liittyen toiseen keskusteluun. Se on vähän turhan hieno omaan käyttöön,
kun siinä mukana sitä lämmitystarpeen arviointia. Koitin Developer Tools editorilla sitä soveltaakin pelkkään COP laskentan, mutta ei taidot riitä. Onko koodissa COP laskettu jotenkin -15 ja +7 arvojen kulmakertoimen perusteella eri lämpötiloille?
Siis oliko tarkoituksesi katsoa ennustetta ja pyrkiä ennustamaan eri tunneille lämmitystapaa vai tämän hetken tilannetta ja sen perusteella sitten kertoa yksi tulos mallia "halvin lämmitystapa juuri nyt on puu/sähkö/öljy" ja tuo sitten muuttuisi? Eikun vai puhuitko ennusteesta siksi, että pitää saada seuraavan tunnin osalta tieto?
 

jämä67

Aktiivinen jäsen
Siis oliko tarkoituksesi katsoa ennustetta ja pyrkiä ennustamaan eri tunneille lämmitystapaa vai tämän hetken tilannetta ja sen perusteella sitten kertoa yksi tulos mallia "halvin lämmitystapa juuri nyt on puu/sähkö/öljy" ja tuo sitten muuttuisi? Eikun vai puhuitko ennusteesta siksi, että pitää saada seuraavan tunnin osalta tieto?
VILP/ÖLJY vaihtoon riittäisi itsellä hyvin "halvin lämmitystapa juuri nyt"

Ennustetta mietin tuohon puunpolton omaan graafiin liittyen, mutta se nyt oli vaan heitto, eikä ollenkaan välttämätön.

Vähän vielä hukassa kaikkien Jinjojen, yamlien ja templatien kanssa. En kuitenkaan halua sotkea tuota sinun pakettia mitenkään, että saan helposti päivitettyä sitä, kun keksitte jotain uutta kivaa.
 

Temez

Aktiivinen jäsen
@Temez , laitoit jo taannoin Jinja2 koodia lämmitystavan valintaan liittyen toiseen keskusteluun. Se on vähän turhan hieno omaan käyttöön,
kun siinä mukana sitä lämmitystarpeen arviointia. Koitin Developer Tools editorilla sitä soveltaakin pelkkään COP laskentan, mutta ei taidot riitä. Onko koodissa COP laskettu jotenkin -15 ja +7 arvojen kulmakertoimen perusteella eri lämpötiloille?
Python:
{##### Settings #####}
{% set heaters = [
 {"name": "ILP", "cop+7": 4, "cop-15": 1, "mincop": 1, "maxcop": 4 },
 {"name": "Sähkö"},
 {"name": "OIL", "cost": 0.04},
 {"name": "Wood", "cost": 0.04}]
%} {# Heater settings. Price of kWh in cost. #}
{# Electricity prices, list of prices €/kWh #}
{% set data = state_attr('sensor.shf_electricity_price_now', 'all_prices')[0:24] %}
{# Weather data #}
{% set weather = (state_attr("weather.sijainti", "forecast"))[0:24] %}

{##### SCRIPT STARTS #####}

{# Calculate needed energy #}
{% set output = namespace(value=[], temps=[]) %}
{% for value in weather %}
  {%- set output.temps = output.temps + [value["temperature"]| float] -%}
{%- endfor -%}
{% set output.value = output.value | sum %}
{%- set costs = namespace(value=[], output=[], sorted=[], powers=[], index=0) %}

{# Calculate hourly price for each heater #}

{%- for value in range(0,data|length) %}
  {%- set costs.index = loop.index-1 -%}
  {%- for heater in heaters %}
    {%- if heater["cost"] | default(0) %}
      {%- set power = heater["power"] -%}
      {%- set t = heater["cost"] - 0.000001*sin(loop.index/24*pi) -%} {# Daytime preferred #}
    {%- else -%}
      {%- set t = output.temps[loop.index-1] %}
      {%- set mincop = heater["mincop"] | default(1) %}
      {%- set maxcop = heater["maxcop"] | default(5) %}
      {%- set cop7 = heater["cop+7"] | default(1) %}
      {%- set cop15 = heater["cop-15"] | default(1) %}
      {%- set cop = max(min((t+15)*(cop7-cop15)/22+cop15,maxcop),mincop) %}
      {%- set t = data[costs.index]/cop %}
    {%- endif %}
    {%- set costs.value = costs.value + [t] -%}
  {%- endfor %}
    {%- set idx = costs.value.index(costs.value|min) -%}
{#- MUOKKAA TÄSTÄ -#}
{#- {{ costs.value }} -#}
{{ heaters[idx]["name"] + "\r\n" }}
{#- MUOKKAA TÄHÄN -#}
  {%- set costs.value = [] -%}
{%- endfor %}
Tässä voisi olla jotain pohjaa. Puskee ulos tämmöisen listan eli 24h ajalla halvin lämmitystapa noista yläosan määritelmistä:
ILP
ILP
ILP
ILP
ILP
ILP
ILP
ILP
Wood
Wood
Wood
Wood
Wood
Wood
Wood
Wood
Wood
Wood
Wood
Wood
Wood
ILP
ILP
ILP

Pääset tämän perusteella ehkä alkuun? Koodissa merkitty kohta "MUOKKAA TÄSTÄ/TÄHÄN", josta saa myös ne tuntikohtaiset kWh-hinnat tarvittaessa printtautumaan.
 

aNT7I

Jäsen
Yritin tehdä jonkin sortin version siitä rankkausesta tariffien kanssa.
shf_electricity_price_now-sensorin today_prices ja tomorrow_pricesin pohjalta tulee rankit ja lista samassa "aikajärjestyksessä."

Koodi on jinjan array-rajoitteiden takia kohtuu tunkkainen. :( Listaa kun ei pääse sijoittamaan arvoja kuin loppuun, eikä ole pääsyä muuttamaan arvoja jossain indexissä. Muuten tuon olisi voinut tehdä lyhyemmin jollain tuplella tms.

Pituutta lisää vielä se, että nyt kahdelle samalle arvolle tulee eri rankit, kuten alkuperäisen API:nkin rankkauksessa.

Koodi alkaisi riviltä 63 ja tulee attribuutti-listaksi mukaan price_now:hun: (https://pastebin.com/yGNGgR8B)

today_ranks: >
{% set handled = namespace(list=[]) %}
{% set break = namespace(found=0) %}
{% set rank = namespace(slot=0) %}
{% set time = namespace(slot=0) %}
{% set output = namespace(value=[]) %}
{% for price in state_attr("sensor.shf_electricity_price_now", "today_prices") %}
{% set time.slot = loop.index0 %}
{% for price2 in state_attr("sensor.shf_electricity_price_now", "today_prices")|sort %}
{% if price==price2 and break.found==0 %}
{% set rank.slot = loop.index0 %}
{% for x in handled.list %}
{% if rank.slot==handled.list[loop.index0] %}
{% set break.found=2 %}
{% endif %}
{% endfor %}
{% if break.found==0 %}
{% set output.value = output.value + [loop.index] %}
{% set handled.list = handled.list + [rank.slot] %}
{% set break.found=1 %}
{% elif break.found==2 %}
{% set break.found=0 %}
{% endif %}
{% endif %}
{% endfor %}
{% set break.found=0 %}
{% endfor %}
{{output.value}}
tomorrow_ranks: >
{% set handled = namespace(list=[]) %}
{% set break = namespace(found=0) %}
{% set rank = namespace(slot=0) %}
{% set time = namespace(slot=0) %}
{% set output = namespace(value=[]) %}
{% for price in state_attr("sensor.shf_electricity_price_now", "tomorrow_prices") %}
{% set time.slot = loop.index0 %}
{% for price2 in state_attr("sensor.shf_electricity_price_now", "tomorrow_prices")|sort %}
{% if price==price2 and break.found==0 %}
{% set rank.slot = loop.index0 %}
{% for x in handled.list %}
{% if rank.slot==handled.list[loop.index0] %}
{% set break.found=2 %}
{% endif %}
{% endfor %}
{% if break.found==0 %}
{% set output.value = output.value + [loop.index] %}
{% set handled.list = handled.list + [rank.slot] %}
{% set break.found=1 %}
{% elif break.found==2 %}
{% set break.found=0 %}
{% endif %}
{% endif %}
{% endfor %}
{% set break.found=0 %}
{% endfor %}
{{output.value}}

Sen mitä testailin, niin koodi toimii mielivaltaisella listalla:
Kuvan koodissa on myös kommentit mukana.
Testi templatella voi kokeilla, jos löytyy vielä bugeja: https://pastebin.com/YHsktsRn

Screenshot 2023-01-17 154551.jpg
 
Viimeksi muokattu:

Mikki

Hyperaktiivi
Yleisenä kommenttina, että jos APi päästä toivotaan jotain apuja Yamlin pitämiseksi yksinkertaisempana niin kannattaa ideoida mitä tarvittaisiin. On aina paljon helpompaa koodata moni juttu C#lla vs. Yaml.
 

jämä67

Aktiivinen jäsen
Vähän aihetta liipaten kysymys ESP controllereihin liittyen. Tilasin wemos D1 mini:n., kun vaikutti suositulta alustalta. Se vähä mitä etukäteen tutkailin, niin ilmeisesti vaatii ekalla asennuskerralla sarjaliikenneyhteyden. Miulla piti olla usb muunnin, mutta nyt kun kaivoin esiin, niin sepäs olikin rs-485. Täytyykö pistää tilaukseen, vai onko tuohon muuta keinoa ilman adapteria tiedossa? win11 pc ja löytyy vanha läppäri jollain ubuntullakin.

Testailin @Temez :n COP laskuria ja ainakin näillä keleillä tuuppasi ihan oikean suuntaista cop/energian hintaa :)
Sain koodista tehtyä template sensoriin ja dashbordillekin näkymään. Tuntikohtaisia kWh hintoja en saanut ainakaan vielä siirtymään, vaikka siellä template editorissa näkyikin. Niissä oli myös pitkä liuta desimaaleja, enkä osannut löytää oikeaa kohtaa pyöristyksen lisäykseen.
Vaatii vielä harjoittelua, että saa ne hyödynnettyä automaatiossa asti.

Haittaa vähän harrastuksia, kun sain vihdoin lämpölasit pariin vanhaan kuistin ikkunaan ja täytyy askarrella ne pokiin kiinni ja paikalleen.
 

Temez

Aktiivinen jäsen
Vähän aihetta liipaten kysymys ESP controllereihin liittyen. Tilasin wemos D1 mini:n., kun vaikutti suositulta alustalta. Se vähä mitä etukäteen tutkailin, niin ilmeisesti vaatii ekalla asennuskerralla sarjaliikenneyhteyden.
Minulla on käytössä ollus Wemos D1 minejä aikanaan ja minusta ne menivät micro-usb:llä kiinni läppäriin. Eli ei tarvitse sarjaporttimuunninta. Kuvan näkee esim. täältä: https://ihmevekotin.fi/esp8266/501-wemos-d1-mini-v3-nodemcu-esp8266-iot-kehitysalusta-kopio.html
Testailin @Temez :n COP laskuria ja ainakin näillä keleillä tuuppasi ihan oikean suuntaista cop/energian hintaa :)
Sain koodista tehtyä template sensoriin ja dashbordillekin näkymään. Tuntikohtaisia kWh hintoja en saanut ainakaan vielä siirtymään, vaikka siellä template editorissa näkyikin. Niissä oli myös pitkä liuta desimaaleja, enkä osannut löytää oikeaa kohtaa pyöristyksen lisäykseen.
Vaatii vielä harjoittelua, että saa ne hyödynnettyä automaatiossa asti.
Hienoa! Siitä se homma etenee pikkuhiljaa. Noissa jinja-koodeissa on se huono puoli, että kaikki ulostuleva on String/merkkijono-tyyppistä. Mutta HomeAssistant tuntui tulkkaavan sen Template-sensorin attribuuteissa ihan käsiteltävissä olevaksi Arrayksi/listaksi.
 

jämä67

Aktiivinen jäsen
Minulla on käytössä ollus Wemos D1 minejä aikanaan ja minusta ne menivät micro-usb:llä kiinni läppäriin. Eli ei tarvitse sarjaporttimuunninta. Kuvan näkee esim. täältä: https://ihmevekotin.fi/esp8266/501-wemos-d1-mini-v3-nodemcu-esp8266-iot-kehitysalusta-kopio.html
Juu meni se ihan kivuttomasti esphome addonin kautta, kun vaihtoi usb kaapelin. Oli jäänyt laatikkon piuha missä pelkkä lataus.
Esphome nettisivun ohjeissa puhutaan vielä noista sarjaliikenteistä, mutta taitaa olla historiaa.
 

marpelto

Jäsen
Nyt kun Fissio menee maksulliseksi..niin kuinka voin ohjata Oumania EH800 siten että kun "SHF Price acceptable" on ON/OFF rele raksahtaa vastaavasti. Tähän voisin käyttää "Aubess Smart Switch/EM 3 Switch 1"

binary_sensor.shf_price_acceptable

1674457952435.png


Tähän mennessä Fissio Raspi on ohjannut suoraan GPIO nastalta Oumannin Kotona/Poissa kytkintä. Ja Oumannin asetuksista säädetty lämmönpudotus sen verran reilusti että shuntti menee kiinni.

Tähän voisin käyttää "Aubess Smart Switch/EM 3 Switch 1"
switch.aubess_smart_switch_em_3_switch_1


1674458201997.png



Pitääpä perehtyä tähän...
1674465152437.png

Vai voisiko tuon naputella suoraan yaml:iin?
 

marpelto

Jäsen
Eipä onnistunutkaan kun kaikki kytkimet oli "OFFLINE". Tuya API token expired. Eilen vanhentunut. Tuohon pitää keksiä joku muu ratkaisu vaikka siihen saakin 6kk lisää aikaa. Ehkä re-flash "Tasmota"
 
Viimeksi muokattu:

jämä67

Aktiivinen jäsen
Täältä vinkkiä, miten ohjata oumannia suoraan home assistantilla.
Itse lisäsin hetki sitten EH800:n perustiedot näkymään kotinäytöllä. Mallia otin viestiketjun loppupäässä olevista viesteistä.
Miulla vain hakee tietoa. En kokeillut ohjauspuolta.
 

marpelto

Jäsen
@marpelto: Onko se Oumanin poissa/kotona kytkin siis potentiaalivapaa releohjaus? Jos on ja haluat _helpon_ ratkaisun, niin osta Shelly Plus 1 ja käytä sitä ohjaamiseen: https://www.shelly.cloud/en/products/shop/shelly-plus-1

Sitä voi ohjata joko HA:lla, tai sitten minimaalisella spot-hinta.fi skriptillä.
Ouman on potentiaalivapaa. Eli kytkin päähän rittää. Tuo "shelly-plus-1" on käytännössä sama kuin "Aubess Smart Switch" joita sai vitosella ja mulla on repullinen niitä. Pakko saada sillä toimimaan.
 

Mikki

Hyperaktiivi
Ouman on potentiaalivapaa. Eli kytkin päähän rittää. Tuo "shelly-plus-1" on käytännössä sama kuin "Aubess Smart Switch" joita sai vitosella ja mulla on repullinen niitä. Pakko saada sillä toimimaan.
No ei se varmaan ihan sama ole. Tuohon Shellyyn voit työntää skriptin joka toimii ilman HA:ta. Jos HA pitää olla kuviossa, niin sitten varmaan pitkälti sama jos Shellystä helposti tuota Aubessia voi ohjata.

Tämä skripti tekisi jo paljon asioita tuossa Shellyssä:
 
Täältä vinkkiä, miten ohjata oumannia suoraan home assistantilla.
Itse lisäsin hetki sitten EH800:n perustiedot näkymään kotinäytöllä. Mallia otin viestiketjun loppupäässä olevista viesteistä.
Miulla vain hakee tietoa. En kokeillut ohjauspuolta.
Moi mä olen komennellut myös Oumannin releohjausta HA:lla. Tässäpä koodi jolla homma hoituu. Yhdistelin nuo kyselyt yhteen tiedostoon ja kysyn arvot kerralla, turhaa kysyä joka parametri erikseen. Mulla on 2 lämmityssäätöpiiriä ja laajennusyksikkö. Nuo parametrit saattavat eri kokonpanoissa olla eri. Kaivelin nuo debuggaamalla selainkäyttöliittymää, painoin nappulaa ja katoin mitä selan lähetti Oumannille....

Mulla on configuration.yaml -filessä tälläinen pätkä. Vaihda oman purkkisi IP tuohon YourIP -kohtaan ja uid=käyttäjätunnus pwd=salasana

YAML:
shell_command:
  ouman_logon: 'curl "http://YourIP/login?uid=xxxxx;pwd=xxxxxxxx;" > /dev/null'
  ouman_data: 'curl "http://YourIP/request?S_135_85;S_259_85;S_275_85;S_227_85;S_362_85;S_293_85;S_310_85;S_240_85;S_272_85;S_306_85;" --output /config/ouman_data.txt'
   # Kyseltävät kentät tässä järjestyksessä
   # 1  S_135_85 K/P -tila
   # 2  S_259_85 L1 meno
   # 3  S_275_85 L1 pyynti
   # 4  S_227_85 Ulkolämpötila
   # 5  S_362_85 Releohjauksen tila
   # 6  S_293_85 L2 meno
   # 7  S_310_85 L2 pyynti
   # 8  S_240_85 Poltinhälytys
   # 9  S_272_85 L1 venttiili
   # 10 S_306_85 L2 venttiili
   #ks jatkot: automations.yaml, sensors.yaml ja binary_sensors.yaml

switch:
  - platform: command_line
    switches:
      eh800ltp:
        friendly_name: EH_lampotila_pudotus
        unique_id: "410"
        command_on: >
          curl "http://YourIP/update?S_135_85=1;S_222_85=1;" --output /config/oumanltp2.txt
        command_off: >
          curl "http://YourIP/update?S_135_85=0;S_222_85=0;" --output /config/oumanltp2.txt
        command_state: >
          cut -b 17 /config/oumanltp2.txt
        value_template: '{{ value == "1" }}'
    #Releohjaus
      eh800releohjaus:
        friendly_name: Releohjauksen_etäkäyttö
        unique_id: "420"
        command_on: >
          curl "http://YourIP/update?S_362_85=1;" --output /config/oumanrele2.txt
        command_off: >
          curl "http://YourIP/update?S_362_85=2;" --output /config/oumanrele2.txt
        command_state: >
          cut -b 17 /config/oumanrele2.txt
        value_template: '{{ value == "1" }}'      
 #Ouman -jutut päättyy -------------------

automations.yaml Tämä pätkä päivittää datan 5 min välein
YAML:
- id: '1'
  alias: Ouman-toiminnot
  description: Automaattinen kirjautuminen Ouman EH800, lämpötilojen luku, 5min välein
  trigger:
  - platform: time_pattern
    minutes: /5
  condition: []
  action:
  - service: shell_command.ouman_logon
    data: {}
  - delay:
      hours: 0
      minutes: 0
      seconds: 1
      milliseconds: 0
  - service: shell_command.ouman_data
    data: {}
  mode: single

sensors.yaml -tässä saat oumannin mittaukset HA-sensoreiksi
YAML:
#Ouman -sensorit alkaa ###########################
- platform: command_line
  name: Oumankierto
  unique_id: "210"
  command: cut -d ";" -f 2 /config/ouman_data.txt | cut -d "=" -f 2
  unit_of_measurement: "°C"

- platform: command_line
  name: Oumanpyynto
  unique_id: "220"
  command: cut -d ";" -f 3 /config/ouman_data.txt | cut -d "=" -f 2
  unit_of_measurement: "°C"

- platform: command_line
  name: Oumanulko
  unique_id: "230"
  command: cut -d ";" -f 4 /config/ouman_data.txt | cut -d "=" -f 2
  unit_of_measurement: "°C"

- platform: command_line
  name: ouman_l2meno
  unique_id: "240"
  command: cut -d ";" -f 6 /config/ouman_data.txt | cut -d "=" -f 2
  unit_of_measurement: "°C"
 
- platform: command_line
  name: ouman_l2pyynti
  unique_id: "250"
  command: cut -d ";" -f 7 /config/ouman_data.txt | cut -d "=" -f 2
  unit_of_measurement: "°C"
 
- platform: command_line
  name: ouman_l1venttiili
  unique_id: "260"
  command: cut -d ";" -f 9 /config/ouman_data.txt | cut -d "=" -f 2
  unit_of_measurement: "%"
 
- platform: command_line
  name: ouman_l2venttiili
  unique_id: "270"
  command: cut -d ";" -f 10 /config/ouman_data.txt | cut -d "=" -f 2
  unit_of_measurement: "%"
 #Ouman -sensorit loppuu ###################

binary_sensors.yaml
YAML:
#binary_sensors.yaml
 #Ouman kotona-possa -tila
- platform: command_line
  name: Oumanltptila
  unique_id: "100"
  command: cut -d ";" -f 1 /config/ouman_data.txt | cut -d "=" -f 2
  payload_on: "1"
  payload_off: "0"
 #Ouman releohjaus -tila
- platform: command_line
  name: OumanReleohjaus
  unique_id: "110"
  command: cut -d ";" -f 5 /config/ouman_data.txt | cut -d "=" -f 2
  payload_on: "1"
  payload_off: "2"
 #Ouman poltinhälytys
- platform: command_line
  name: ouman_poltinhaly
  unique_id: "120"
  command: cut -d ";" -f 8 /config/ouman_data.txt | cut -d "=" -f 2
  payload_on: "ON"
  payload_off: "OFF"
 

jarzi

Aktiivinen jäsen
Ha:ta opetellut käyttämään ja spot.price paketti ajettu sisään, tarkoitus ajaa kiertovesipumppua ja lvv:tä halvoilla tunneilla. "SHF Cheapest period hours toiminnolla automaatio tehty ja sliderilla säädetty päällä olo aika, laitteet lähtee päälle kun pitää muttei sammu annetun ajan kuluttua. Jokin viba säädöissä tai käyttäjässä, mutta mikä?
 

Temez

Aktiivinen jäsen
Ha:ta opetellut käyttämään ja spot.price paketti ajettu sisään, tarkoitus ajaa kiertovesipumppua ja lvv:tä halvoilla tunneilla. "SHF Cheapest period hours toiminnolla automaatio tehty ja sliderilla säädetty päällä olo aika, laitteet lähtee päälle kun pitää muttei sammu annetun ajan kuluttua. Jokin viba säädöissä tai käyttäjässä, mutta mikä?
SHF-paketissa ei ole mitään automaatiota sammutukseen. Se vain kertoo halvimman pätkän ajankohdan. Riippuu sitten käyttötarpeesta, että miten sammutus kannattaa tehdä.

Helpointa on laittaa pumppu päälle, tehdä halutun pituinen delay automaatioon ja sitten kytkeä pumppu pois päältä. Sen voi tehdä aluksi staattiseksi eli määrität automaatiossa pituudeksi 4h (sen voi laittaamyös seuraamaan sitä liukukytkintä, jossa periodin pituus asetetaan). Kuva liitteenä (puhelimen näkymästä) tästä ajatuksesta staattisella viiveellä.

Ehkä voisin tehdä toisen anturin tulevaisuudessa, jossa olisi se katkaisuhetki myös omana anturinaan, jotta sitä voisi käyttää automaatiossa.
 

Liitteet

  • Screenshot_2023-01-24-11-28-14-355_io.homeassistant.companion.android.jpg
    Screenshot_2023-01-24-11-28-14-355_io.homeassistant.companion.android.jpg
    52,5 KB · Katsottu: 53

marpelto

Jäsen
Moi...lämpötilat ym tulee hienosti. Mutta Tuo Lämpötilan pudotus ei toimi....


Kun lähetän curl viestin curl --output - "http://192.168.1.22/update?S_135_85=1;" niin tila vaihtuu
Kotona Poissa ja toisinpäin curl --output - "http://192.168.1.22/update?S_135_85=0;"

1674557574765.png




@Ville-Veikko
Mutta lämpötilan pudotus ei tee mitään? (otin muuten pois stuon 222_85, mitähän se tekee)?



1674557550630.png





switch:
- platform: command_line
switches:
eh800ltp:
friendly_name: EH_lampotila_pudotus
unique_id: "410"
command_on: >
curl "http://192.168.1.22/update?S_135_85=1;" --output /config/oumanltp2.txt
command_off: >
curl "http://192.168.1.22/update?S_135_85=0;" --output /config/oumanltp2.txt
command_state: >

cut -b 17 /config/oumanltp2.txt
value_template: '{{ value == "1" }}'
#Releohjaus
eh800releohjaus:
friendly_name: Releohjauksen_etäkäyttö
unique_id: "420"
command_on: >
curl "http://192.168.1.22/update?S_362_85=1;" --output /config/oumanrele2.txt
command_off: >
curl "http://192.168.1.22/update?S_362_85=2;" --output /config/oumanrele2.txt
command_state: >
cut -b 17 /config/oumanrele2.txt
value_template: '{{ value == "1" }}'
#Ouman -jutut päättyy -------------------
 

marpelto

Jäsen
Testasin AUBES smart-switchillä ja lähti toimimaan...
Kun Max Price allowed hintaa muutti niin rele rele raksahtaa kun hinta ylittyy/alittuu.
Käsittääkseni, jos ohjaan tuolla suoraan Ouman koton/possa kytkintä niin se vastaa GPIO ohjausta joka oli Fissio Raslilta

1674565212825.png


- id: '11'
description: "Aubes test off"
mode: single
trigger:
- platform: state
entity_id:
- binary_sensor.shf_price_acceptable
from: "on"
to: "off"
condition: []
action:
- type: turn_off
device_id: 8c97565817d1bd0ab39535adc60eecf7
entity_id: switch.aubess_smart_switch_em_6_switch_1
domain: switch
alias: Aubes_test_off

- id: '12'
description: "Aubes test on"
mode: single
trigger:
- platform: state
entity_id:
- binary_sensor.shf_price_acceptable
from: "off"
to: "on"
condition: []
action:
- type: turn_on
device_id: 8c97565817d1bd0ab39535adc60eecf7
entity_id: switch.aubess_smart_switch_em_6_switch_1
domain: switch
alias: Aubes_test_on
Tosin aion koodiin lisätä curl komennot niin en tarvitse relettä ollenkaan
curl --output - "http://192.168.1.22/update?S_135_85=1;"
curl --output - "http://192.168.1.22/update?S_135_85=0;
 

jarzi

Aktiivinen jäsen
SHF-paketissa ei ole mitään automaatiota sammutukseen. Se vain kertoo halvimman pätkän ajankohdan. Riippuu sitten käyttötarpeesta, että miten sammutus kannattaa tehdä.

Helpointa on laittaa pumppu päälle, tehdä halutun pituinen delay automaatioon ja sitten kytkeä pumppu pois päältä. Sen voi tehdä aluksi staattiseksi eli määrität automaatiossa pituudeksi 4h (sen voi laittaamyös seuraamaan sitä liukukytkintä, jossa periodin pituus asetetaan). Kuva liitteenä (puhelimen näkymästä) tästä ajatuksesta staattisella viiveellä.

Ehkä voisin tehdä toisen anturin tulevaisuudessa, jossa olisi se katkaisuhetki myös omana anturinaan, jotta sitä voisi käyttää automaatiossa.
Aa, jotenkin luulin että tulee automaattisesti sammutus kun liukukytkimellä säädetty aika kulunut. tuon delay automaation kokeilinkin jo eilen. Olikin vain idsatatt1 ongelmana.
Kiitos
 

heebo1974

Jäsen
Ei kukaan ole kokeillut onnistuisiko Rank:ien listaaminen analogisen kellon muodossa jotenkin graafiksi ?
Olisi kiva saada joku selkeä tapa nähdä miten Rankit sijoittuvat vuorokaudelle.
Toki tuo hintagraafi on tavallaan selkeä, mutta välillä erot tuntien välillä on niin pienet, ettei selkeästi näe mikä "rank" on kyseessä.
Hmm ehkä sittenkin voisi tehdä tuollaisen "hintagraafin", mutta hinnat olisivat rankkeja, joten ne erottuisivat selvemmin.
Kaipaan tällaista lähinnä manuaalisten asioiden hoitoon. Esim. nopeasti vilkaistuna ja kerrottuna esim. vaimolle "älä laita vielä pesukonetta päälle, kun tunninpäästä on selkeästi halvempaa" tmjs. :)
Myös automaatioden optimoinnissa tuo selkeyttää tilannetta, kun voi tehdä muutoksia niihin visuaalisten ärsykkeiden avulla.

P.s. Joo on jo sähkönhinnan värivalo käytössä. :)

EDIT: No tällainen tuli sitten muutamassa minuutissa väkerrettyä. :)
Todellakin "vääristää" tilannetta ainakin silloin, kun sähkönhinta on tasaista ja halpaa. :)
Lisäksi "priorityhours" tyyppiset rankin manipuloinnit vaikuttavat tuohon.
Pitää muokata vielä. Laittaa esim. steplinenä sähkön hinta tuohon mukaan.

EDIT2:
Eli jotain tällaista.
1674581820056.png
 

Liitteet

  • 1674580684614.png
    1674580684614.png
    22,4 KB · Katsottu: 29
Viimeksi muokattu:
@Ville-Veikko
Mutta lämpötilan pudotus ei tee mitään? (otin muuten pois stuon 222_85, mitähän se tekee)?
Mulla on 2 lämmityspiiriä käytössä L1 =patteriverkko, L2=lattialämmitys, (koodi pistää lämmönpudotuksen päälle molempiin piireihin) siksi 2 parametria. Jätä toinen pois jos ei tarvetta.
Katso asetukset -välilehdeltä, onko siellä asetettu Lämmönpudotus (menovesi) kohtaan jotakin. Jos 0 niin ei vaikuta mitenkään. Menovesi-info sivulta näkee joitan osviittaa miten Oumanni on arponut lämpönsä.

HA ei näytä K/P -kytkimen tilan muutosta ilman että arvo kysytään Oumannilta uudestaan. Kun testailet, päivitä Oumannin hallintasivu, se ei pysy mukana jos vierestä ampuu säätäjä purkille. Ja toki kannattaa vilkasta mitä Oumanni vastasi curlille, sen näet kohdetiedostosta /config/oumanltp2.txt Mulla on triggerit päivitysautomaatiossa. Jätin sen pois eilisestä esimerkistä ku ajattelin että sotkisi vaan. Kytkimen tilan muutos päivittää tilat aina. Tuo oli viksuinta mitä viime syksynä tuohon keksin. En jaksanut kyhätä erillistä automaatiota vaan ajan tuota samaa.

YAML:
- id: '1'
  alias: Ouman-toiminnot
  description: Automaattinen kirjautuminen Ouman EH800, lämpötilojen luku, 5min välein
  trigger:
  - platform: time_pattern
    minutes: /5
  - platform: state
    entity_id:
    - switch.eh800ltp
    from: 'on'
    to: 'off'
  - platform: state
    entity_id:
    - switch.eh800ltp
    from: 'off'
    to: 'on'
  - platform: state
    entity_id:
    - switch.eh800releohjaus
    from: 'on'
    to: 'off'
  - platform: state
    entity_id:
    - switch.eh800releohjaus
    from: 'off'
    to: 'on'
  condition: []
  action:
  - service: shell_command.ouman_logon
    data: {}
  - delay:
      hours: 0
      minutes: 0
      seconds: 1
      milliseconds: 0
  - service: shell_command.ouman_data
    data: {}
  mode: single

Parametrejä on näppärä selvitellä Selaimen Developer Toolsilla. Network -välilehdellä näkyy hyvin mitä selain juttelee Oumannin purkin kanssa. Kuvissa Lämpötilan pudotus aka Kotona/possa. Oululaisen logiikan mukaan siinä on 3 arvoa, joista käytännössä 0 ja 2 aiheuuttaa samanlaisen toiminnan, eli kumpikaan ei laske lämpötiloja. 2 on kiva jäynä HA:n binary sensorille. En muista sainko tuon kakkosen koskaan toimimaan oikein.
Kotona =0
Ei K/P -ohjausta = 2
Poissa = 1
1674580268430.png

1674580403440.png

1674580619068.png
 
Viimeksi muokattu:

puuro

Jäsen
Vaihdoin vuosia käyttämästäni fissiosta Home Assistantiin edellämainitun muuttuessa maksulliseksi. Tarkoitus oli toteuttaa pelkillä Shellyillä, mutta tilasin vahingossa vanhemmat versiot releistä jotka eivät tukeneet scriptejä niin piti toteuttaa HA:n kautta. Tässä ketjussa ja aloitusviestissä olevat ohjeet (ja monet muutkin löytämäni) menivät hilseen yli ohjelmointitaidottomalta, ja tuntui että monessa oli jotain oleellista jätetty kertomatta. Tämän ohjeen mukaan sain homman lopulta pelittämään. Tarkoituksenmukaisemmin mitä pelkkä kopioitu shellyn scripti olisi tehnyt.

Aloitin videosta nro. 6, siihen asti pääsin tämän ketjun aloitusviestiin kootuilla ohjeilla ja linkeillä, mutta helpommalla varmaan pääsisi seuraamalla alusta asti nuo videot.

Nuokaan videot eivät ole täysin rautalangasta väännetyt, jotain jäi itse keksittäväksi, mutta ohjeet olivat parhaat mitä löysin. Ja ymmärrys HA:n toiminnasta kasvoi samalla sen verran, että laittanen sen alle muitakin toimintoja sen alle ja sähkön hintakäyrät näkyville pikku näytölle eteiseen tai keittiöön.
 

Temez

Aktiivinen jäsen
Nuo Ouman-ohjeethan voisi melkein eriyttää omaksi ketjukseen tänne foorumille? Kuulostaisi näppärältä uusille käyttäjille, että sen ohjeet löytyisi nopeasti erikseen. Edit: ei ole siis pakko.
 

jämä67

Aktiivinen jäsen
Fissiosta nypätty piuhat irti ja siirrytty Home assistantin ohjauksiin :sormet:
Kävin jo @Mikki lle kahveet tarjoamassa ja tarjoaisin myös @Temez lle aloituspaketista ja koodausavusta, jos siihen löytyy mahdollisuus!
Kivuttomasti onnistui siirtyminen ja vähän lisääkin ominaisuuksia tuli samalla. Uusia ideoita vielä hautumassa...
 
Back
Ylös Bottom