Giter VIP home page Giter VIP logo

hass_omie's People

Contributors

luuuis avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

hass_omie's Issues

Sensor Coopernico Go Trihorário €/MWh

@luuuis , conforme conversado, segue a proposta de sensor Coopernico Go trihorário MWh.

` - name: "Coopernico Go Price Hour MWh"
unique_id: coopernico_spot_price_trihorario_MWh
unit_of_measurement: '€/MWh'
state_class: measurement
state: >
{% set PM = states('sensor.omie_spot_price_pt')|float -%}
{% set MAJ = states('sensor.omie_adjustment_price_pt')|float -%}
{% set CGS = 4 -%}
{% set k = 10 -%}
{% set GO = 10 -%}
{% set FP = 0.15 -%}
{% set TAR = (states('sensor.energy_access_tarifs_price') | float) | round(5) -%}

    {{ (((PM + CGS + k+ GO)*(1 + FP) + MAJ + TAR)) | round(5) }}
  attributes:
    friendly_name: "Coopérnico Go (tarifário tri-horário) MWh"
    formula: "(PM+CGS+K+GO)*(1+FP)+MIBEL+TAR"
    PM: "{{ states('sensor.omie_spot_price_pt')|float }}"
    MIBEL: "{{ states('sensor.omie_adjustment_price_pt')|float }}"
    CGS: "{{ 4 | float }}"
    k: "{{ 10 | float }}"
    GO: "{{ 10 | float }}"
    FP: "{{ 0.15 | float  }}"
    TAR_vazio: "{{ -118.5 | float }}"
    TAR_cheia: "{{ -106.9 | float }}"
    TAR_ponta: "{{ -1.8 | float }}"
    today_hours: >
        {% set CGS = 4 -%}
        {% set k = 10 -%}
        {% set GO = 10 -%}
        {% set FP = 0.15 -%}
        {% set TAR_vazio = -118.5 -%}
        {% set TAR_cheia = -106.9 -%}
        {% set TAR_ponta = -1.8 -%}
        
        {% set ns = namespace(hourly_data=[]) %}
        {% for h, PM in state_attr('sensor.omie_spot_price_pt', 'today_hours').items() -%}
          {% set MAJ = state_attr('sensor.omie_adjustment_price_pt', 'today_hours')[h] -%}
          {% if (h.hour >= 10 and h.hour < 13) or (h.hour >= 19 and h.hour < 21)  %}
            {% set TAR = TAR_ponta %}
          {% else %}
            {% if h.hour < 8 and h.hour >= 22  %}
                {% set TAR = TAR_vazio %}
            {% else %}
                {% set TAR = TAR_cheia %}
            {% endif %}
          {% endif %}
        
          {% if PM == None or MAJ == None %}
            {% set price=PM %}
          {% else %}
            {% set price=(((PM + CGS + k+ GO)*(1 + FP) + MAJ + TAR)) | round(5) %}
          {% endif %}
          {% set ns.hourly_data= ns.hourly_data + [(h.isoformat(), price) ]%}
        {% endfor -%}
        {{ dict(ns.hourly_data) }}
    tomorrow_hours: >
        {% set CGS = 4 -%}
        {% set k = 10 -%}
        {% set GO = 10 -%}
        {% set FP = 0.15 -%}
        {% set TAR_vazio = -118.5 -%}
        {% set TAR_cheia = -106.9 -%}
        {% set TAR_ponta = -1.8 -%}
        {% set ns = namespace(hourly_data=[]) %}
        {% for h, PM in state_attr('sensor.omie_spot_price_pt', 'tomorrow_hours').items() -%}
          {% set MAJ = state_attr('sensor.omie_adjustment_price_pt', 'tomorrow_hours')[h] -%}
          {% if (h.hour >= 10 and h.hour < 13) or (h.hour >= 19 and h.hour < 21)  %}
            {% set TAR = TAR_ponta %}
          {% else %}
            {% if h.hour < 8 and h.hour >= 22  %}
                {% set TAR = TAR_vazio %}
            {% else %}
                {% set TAR = TAR_cheia %}
            {% endif %}
          {% endif %}
          
          {% if PM == None or MAJ == None %}
            {% set price=PM %}
          {% else %}
            {% set price=(((PM + CGS + k+ GO)*(1 + FP) + MAJ + TAR)) | round(5) %}
          {% endif %}
          {% set ns.hourly_data= ns.hourly_data + [(h.isoformat(), price) ]%}
        {% endfor -%}
        {{ dict(ns.hourly_data) }}` 

Para o sensor acima funcionar terão de criar um sensor com a TAR do momento, para o preço no momento. Este sensor tem um valor associado ao período no momento. O período é atualizado com uma automação (vazio, cheia, ponta).

- platform: template sensors: energy_access_tarifs_price: unit_of_measurement: "€/MWh" friendly_name: "Energy Hour Access Tarifs" value_template: >- {%- if is_state('select.daily_energy', 'peak') -%}-106.9 {%- elif is_state('select.daily_energy', 'highpeak') -%}-1.8 {%- else -%}-118.5 {%- endif -%}

Automações:
image

Exemplo de uma das automações que altera o período do daily_energy, que é utilizado pelo energy dashboard do HA:
image

Optei por fazer assim, pois parti do Energy Dashboard do HA e tentar obter uma estimativa de consumo/preço diário e mensal, consumido em função dos kWh consumidos da rede, e associado ao preço/h no respetivo momento.
Ou seja, tenho um sensor criado com base no que proponho aqui, mas para €/kWh e associo na configuração do Energy Dashboard do HomeAssistant.

Fica a proposta e encontro-me disponível para ouvir, debater, discutir e melhorar! 😄😄😄

La nueva versión atributos?

Hola de nuevo, con la nueva versión el atributo "day_hours " ha cambiado por "today_hours " pero ahora muestra la fecha y ya los sensores que dependen de estos valores han dejado de funcionar. Como puedo resolverlo?

Erro ao criar integração

Ao acresentar o custom repositoris no hacs dá um erro

Cannot connect to host api.github.com:443 ssl:default [Name has no usable address]

como na imagem

image

O que ha de errado?

Atributos

Hola Luis, tenía todo bien pero con ésta versión han cambiado los atributos y ya no sé manejarlos.
Puedes decirme como puedo ver el precio de una hora en concreto sin que salga la fecha,etc.
Gracias

Tomorrow Null

Boa tarde!
Não sei se está a acontecer com mais alguém, mas hoje não tenho valores tomorrow. Estão todos null, seja para Portugal ou para Espanha... Que se passará?

desfasamento horário ?

Bom dia.
Antes de mais obrigado pelo excelente trabalho.
Perdoem-me se a pergunta for parva visto que sou newbie nestas andanças .

Ultimamente parece me que o preço que me aparece no Home assistant anda desfasado do preço do site da OMIE.es por 2 horas.

Escrevo isto pelas 10:20 da manha, o preço no Home Assistant esta a dar 25/MWh e no site da OMIE o preço das 10 é 44/MWh.
No site da OMIE o preço só irá ser 25 ao meio dia.
Nao sei se temos de aplicar a diferença horaria no site da OMIE, mas mesmo que assim seja o preço devia ser 40.1 e não 25. ?
O que me está a falhar ?

Obrigado
Gonçalo Manuel

Conseguir os mesmos resultados mas com as contas Coopérnico

Boa noite!

Antes de mais, muito obrigado pela integração. Abriu portas a várias possibilidades que não conhecia!
Estou a equacionar mudar para um tarifário horário indexado à conta da informação que a integração permite obter!
Mas para isso, precisava de conseguir obter num sensor semelhante ao Preço Marginal - Portugal, mas com os cálculos do pagamento da Coopérnico. Experimentei usar o template do Wiki (indexado horário bi-horário) e de facto cria um sensor, mas apenas com o valor do momento, e não com os valores passados e futuros como o Preço Marginal mostra. Como poderei obter um sensor semelhante ao Preço Marginal - Portugal mas com a possibilidade de introduzir os dados da Coopérnico...

Luzboa wiki

Viva, alguma possibilidade de adicionar wiki para Luzboa? Obrigado e continuação de bom trabalho

Gráfico Apex não está a carregar com a lista de atributos tomorrow_hours

@luuuis Estou a ter um problema com um gráfico Apex que não carrega. Estou a tentar utilizar este gráfico ApexChart:https://github.com/luuuis/hass_omie/wiki/ApexChartsTodayHourlyValues

Também tentei utilizar os dois geradores de dados do exemplo emhttps://github.com/luuuis/hass_omie/wiki/ApexChartsYesterdayTodayTomorrow mas continua a ser o mesmo

data_generator: >
          return ((hs) => Object.keys(hs).map((dt) => [ new Date(dt), hs[dt]
          ]))(entity.attributes.tomorrow_hours)

e

data_generator: |
          return ((hours) => {
            return Object.keys(hours)
                         .map((dateString) => [ new Date(dateString), hours[dateString]])
                         .map(([date, price]) => [ date, (date.getHours() > 6 && date.getHours() < 21) ? price : null])
          })(entity.attributes.tomorrow_hours)

Estou a tentar criar uma tabela de preços com os atributos tomorrow_hours. Trata-se de um duplicado do gráfico Apex today_hours, em que substituí today_hours por tomorrow_hours no script yaml. Tanto o today_hours como o tomorrow_hours são produzidos a partir do mesmo sensor. O gráfico today_hours do Apex funciona sem qualquer problema e o gráfico tem o seguinte aspeto:
image

Este é o código yaml para o cartão:

type: custom:apexcharts-card
update_interval: 30m
now:
  show: true
span:
  start: day
graph_span: 1d
series:
  - entity: sensor.coopernico_base_tarifario_tri_horario
    name: Coopernico Tri Horario
    stroke_width: 1
    type: line
    curve: stepline
    group_by:
      func: avg
      duration: 30m
    show:
      extremas: true
      legend_value: false
    data_generator: >
      return Object.entries(entity.attributes.tomorrow_hours).map(([dateString,
      price]) => [ new Date(dateString), price ])
yaxis:
  - id: price
    align_to: 10

Este é o aspeto da lista de atributos:
image

Este é o aspeto do gráfico Apex today_hours:
image

O que é que me está a escapar?

Atributos por horas

Hola, gracias por tu trabajo.
Podrías poner como atributo el precio de cada hora en lugar de "day_hours"
Price_00h: value
Price_01h: value
Etc.
Gracias

Erro get_spot

  File "/config/custom_components/omie/sensor.py", line 105, in update
    prices = self._get_data(self._coordinator.data)
  File "/config/custom_components/omie/sensor.py", line 50, in get_spot
    return data.today.spot
AttributeError: 'NoneType' object has no attribute 'today'

Erro em grafico

Olá,
Desde já muito obrigado pelo projecto.

Estou com problemas ao criar o gráfico ApexChart: Today's hourly values, fico sempre com este erro:

/// apexcharts-card version 2.0.4 /// value.all_series_config is not a ChartCardAllSeriesExternalConfig; value.all_series_config.show is not a ChartCardSeriesShowConfigExt; value.all_series_config.show.data_generator is extraneous

já percebi que o problema está nesta linha de código: return Object.entries(entity.attributes.today_hours).map(([dateString, price]) => [ new Date(dateString), price ]), mas não faço ideia de como resolver!

Obrigado

Tomorrows rates not displaying correctly

Esta manhã, actualizei as TAR de amanhã de acordo com as novas taxas que começam em 1 de janeiro de 2024:

      tomorrow_hours: >
       {% set CGS = 4.0 -%}
       {%- set k = 10.0 -%}
       {%- set FP = 0.15 -%}
       {%- set TAR_vazio = 9.2 -%}
       {%- set TAR_ponta = 151.1 -%}
       {%- set TAR_cheias = 23.7 -%}
      today_hours: >
       {% set CGS = 4.0 -%}
       {%- set k = 10.0 -%}
       {%- set FP = 0.15 -%}
       {%- set TAR_vazio = -34.9 -%}
       {%- set TAR_ponta = 81.8 -%}
       {%- set TAR_cheias = -23.2 -%}

Mas o que estou a ver no gráfico da Apex não me parece correto para amanhã. As taxas de pico parecem demasiado baixas. Mais alguém está a ver algo semelhante?
image

É possível criar sensor para Simples Energia?

A formula para o mercado indexado é a seguinte:

PE(h) = (POMIE(h) – K1) x Excedente
POMIE(h) = Preço da Energia horária no Mercado Diário OMIE-Portugal(em €/MWh)
K1 (€/MWh) = Valor fixo correspondente aos gastos operacionais da Simples
VALOR K1 = 10 € / MWh

Exemplo apenas ilustrativo:
No dia 10/05 às 12:00 o preço do mercado foi 201,50€/MWh – 0,2015€/kWh e o excedente injetado na rede para essa hora foi 10 kWh.

O valor a receber será: 10* (0,2015-0,010) = 1,92€

Media do mês (feature request)

Viva,

Diria que com o publico alvo desta integração podemos falar em português !

Antes de mais, obrigado por esta integração. É um método espetacular de estar de olho nas tarifas.

Para me tentar orientar com a media do SPOT nos ultimo dias acabei por criar:

  • platform: statistics
    name: "OMIE Avrg Last 10days"
    entity_id: sensor.omie_spot_price_pt
    state_characteristic: mean
    sampling_size: 240

Funciona até ao limite de 10 dias nativos do HA. Embora possa extrair estes dados para o Influx e posteriormente fazer medias no grafana, era interessante poder ter a media do "ultimo mês till now" no HA sem ter de adicionar o RECORDER para ter uma retention superior.

Achas possível adicionar a feature de produzir a media de tarifa num período selecionável para bater certo com o período de faturação ? Exemplo "media desde o ultimo dia 20" ?

O não é sempre garantido :)

Obrigado

Rui

Home Assistant Core 2023.9.0 - Conversão Float para Int

Após atualização para a versão Home Assistant Core 2023.9.0 a integração deixou de funcionar por falta de conversão de float para int. A solução passa por efetuar esta conversão na chamada á função replace no ficheiro coordinator.py nas linhas 96, 97 e 111:

Linha 96: none_before = now_cet.replace(hour=int(cet_hour), minute=int(cet_minute), second=int(self._second), microsecond=int(self._microsecond))

Linha 97: next_hour = now_cet.replace(minute=0, second=int(self._second), microsecond=int(self._microsecond)) + timedelta(hours=1)

Linha 111: none_before = cet_now.replace(
hour=int(cet_hour),
minute=int(cet_minute),
second=int(self._second),
microsecond=int(self._microsecond))

Cálculo do preço Coopérnico em €/MWh

Não percebo porque raio o preço nos simuladores (neste caso Coopérnico, mas nos outros é igual) são calculados em custo/MWh..

Mas eu por acaso pago ao MWh, ou ao kWh?

Já tentei corrigir as fórmulas, mas acaba sempre por não calcular os preços do dia seguinte...

Já agora as perdas não são 15%..as perdas são obtidas num ficheiro de excel na erse e são diferentes a cada 15 minutos. A média de todos os valores deste ano dá cerca de 8,5%

Média do dia - cálculo errado?

É impressão minha, ou a média do dia não está a ser bem calculada?

Tendo em conta que o mercado negoceia os valores em Espanha com a hora de Espanha+1, a média do dia não deveria ser as 2 horas do dia anterior mais as 22 horas do dia de hoje?

Isto para Portugal.

OMIE - electricity market operator for the Iberian Peninsula" integration stopped working for me at 29 October 2023 at 00h.

Error message is:
TemplateError('ValueError: Template error: float got invalid input 'unknown' when rendering template '{{ states('sensor.omie_spot_price_pt')|float }}' but no default was specified') while processing template 'Template<template=({{ states('sensor.omie_spot_price_pt')|float }}) renders=28>' for attribute 'PM' in entity 'sensor.coopernico_base_tarifario_tri_horario'

It seems like the "OMIE - electricity market operator for the Iberian Peninsula" integration stopped working for me at 29 October 2023 at 00h.

The OMIE service is working and pulling in values.

Proposta para sensor Iberdrola Simples Indexado

Boas,
Mudei para a Iberdrola este mês (Janeiro/2024) e usei o template da Coopernico como base para criar um novo:

  - unique_id: iberdrola_spot_price_simples
    unit_of_measurement: '€/MWh'
    availability: "{{ has_value('sensor.omie_spot_price_pt') }}"
    state_class: measurement
    state: >
      {% set PM = states('sensor.omie_spot_price_pt')|float -%}
      {% set MFRR = 3.206 -%}
      {% set Q = 21 -%}
      {% set FP = 1.1674 -%}
      {% set TAE = 36.5 -%}

      {{ (PM * FP + Q + TAE + MFRR) | round(2) }}
    attributes:
      friendly_name: "Iberdrola Simples indexado"
      formula: "PM*FP+Q+TAE+MFRR"
      PM: "{{ states('sensor.omie_spot_price_pt')|float }}"
      MFRR: "{{ 3.206 }}"
      Q: "{{ 21 }}"
      FP: "{{ 1.1674 }}"
      TAE: "{{ 36.5 }}"
      today_hours: >
        {% set MFRR = 4 -%}
        {% set Q = 21 -%}
        {% set FP = 1.1674 -%}
        {% set TAE = 36.5 -%}

        {% set ns = namespace(hourly_data=[]) %}
        {% for h, PM in state_attr('sensor.omie_spot_price_pt', 'today_hours').items() -%}
          {% if PM == None %}
            {% set price=PM %}
          {% else %}
            {% set price=(PM * FP + Q + TAE + MFRR) | round(2) %}
          {% endif %}
          {% set ns.hourly_data=ns.hourly_data + [(h.isoformat(), price)] %}
        {% endfor -%}
        {{ dict(ns.hourly_data) }}
      tomorrow_hours: >
        {% set MFRR = 3.206 -%}
        {% set Q = 21 -%}
        {% set FP = 1.1674 -%}
        {% set TAE = 36.5 -%}

        {% set ns = namespace(hourly_data=[]) %}
        {% for h, PM in state_attr('sensor.omie_spot_price_pt', 'tomorrow_hours').items() -%}
          {% if PM == None %}
            {% set price=PM %}
          {% else %}
            {% set price=(PM * FP + Q + TAE + MFRR) | round(2) %}
          {% endif %}
          {% set ns.hourly_data=ns.hourly_data + [(h.isoformat(), price)] %}
        {% endfor -%}
        {{ dict(ns.hourly_data) }}

Os valores e a formula foram retirados dos seguintes links:

Os nomes das variáveis que eles usam nas formulas são algo diferentes dos utilizados nos outros templates (que eu vi) mas o resultado parece ser semelhante, mais cêntimo menos cêntimo.

Valor venda inedxado

Os valores de venda indexados não deveria ser com alteração horária?
Na Suelectricidade é indicado que a formula de calculo varia consoante o horario em que é injectado na rede.

De acordo com o número 5, do artigo 288º, do Decreto-lei n.º 15/2022, de 14 de janeiro, o preço do kWh está indexado ao preço do mercado horário do Operador de Mercado Ibérico (OMIE). Esse preço varia todas as horas.
https://sueletricidade.pt/pt-pt/complex-pages/2081/facilitador-de-mercado

No actualiza datos desde ayer a las 10.30

Buenos dias, lo he tenido tiempo funcionando correctamente, pero desde ayer a las 10.30 (quizá sobre esa hora hice un update de home assistant core) ha dejado de fucnionar la integración , vuelvo a recargarlo, reinstalarlo, pero el ultimo dato que aparece es ayer a las 10.30. hay algun problema con la versión o similar?

Versão ApexCharts

Estava a tentar colocar a funcionar o hourly chart mas não consigo.
Idealmente estaria junto do snippet, talvez até em comentário no próprio snippet, em que versão da integração e do ApexCharts foi testado.
Se comentar o data_generator funciona, mas só com valores passados dado que não estará a ir ao atributo.

Tenho ApexCharts 2.0.4 e OMIE 1.0.0

Isto parece um pedido de suporte, mas não sabendo se foi testado com a mesma versão que eu posso não ser o único com o problema.

Hora (GMT / GMT+1 / GMT + DSV)

Boa noite,
image
@luuuis já tocámos neste tema, mas gostava de explorar mais o tema, dado que o sensor da hora atual parece estar a indicar a hora à frente.
O print acima mostra o valor do sensor sensor.omie_spot_price_pt às 21h33 com o valor de 96,56, quando no site da omip (omipdata), indica esse valor para o período 22h-23h.

Nos atributos este valor está associado à data. +01:00.
Hora na verdade a hora portuguesa atualmente é GMT+0 + DSV, e creio ser esse o problema, porque o meu HomeAssistant está no timezone Lisbon (GMT+0) e detecta que estamos com DSV=1, o que faz com que embora sejam 20:33 (GMT+0), na verdade com DSV=1 (período de verão) são 21h33.

Hora o sensor está a usar GMT+1, como se vê nos atributos, e o sensor está a devolver o valor para a hora seguinte, e não da hora corrente.
image

Disponivel para tentar perceber como dar a volta ao tema e eventualmente ajudar.
Após este tema ser "resolvido", publico o sensor de trihorário para a Coopernico (que estou a usar).
Obrigado mais uma vez pelo trabalho desenvolvido!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.