Crall

HA Nordpool och Apex

Oct 2nd, 2025
1,248
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
YAML 6.37 KB | Source Code | 0 0
  1. ***************Template sensorer, skall ligga under template: **********
  2.  
  3.  
  4.   - trigger:
  5.       - trigger: time_pattern
  6.         minutes: /10
  7.       - trigger: homeassistant
  8.         event: start
  9.     action:
  10.       - action: nordpool.get_prices_for_date
  11.         data:
  12.           config_entry: 01K6BFF0TVKT3M3RDYTQWVM38D #byt till din config entry!
  13.           date: "{{ now().date() + timedelta(days=1) }}"
  14.           areas: SE3
  15.           currency: SEK
  16.         response_variable: tomorrow_price
  17.     sensor:
  18.       - name: Tomorrow lowest price
  19.         unique_id: se3_tomorrow_low_price
  20.         state: >
  21.          {% set data = namespace(prices=[]) %}
  22.           {% for state in tomorrow_price['SE3'] %}
  23.             {% set data.prices = data.prices + [(state.price / 1000)] %}
  24.           {% endfor %}
  25.           {{min(data.prices)}}
  26.         attributes:
  27.           data: >
  28.            {% set data = namespace(prices=[]) %}
  29.             {% for state in tomorrow_price['SE3'] %}
  30.               {# Denna rad är den enda som är ändrad #}
  31.               {% set data.prices = data.prices + [{'start': (state.start | as_datetime | as_local).isoformat(), 'end': (state.end | as_datetime | as_local).isoformat(), 'price': state.price/1000}] %}
  32.             {% endfor %}
  33.             {{data.prices}}
  34.   - trigger:
  35.       - trigger: time_pattern
  36.         minutes: /10
  37.       - trigger: homeassistant
  38.         event: start
  39.     action:
  40.       - action: nordpool.get_prices_for_date
  41.         data:
  42.           config_entry: 01K6BFF0TVKT3M3RDYTQWVM38D #byt till din config entry!
  43.           date: "{{ now().date() }}"
  44.           areas: SE3
  45.           currency: SEK
  46.         response_variable: today_price
  47.     sensor:
  48.       - name: Today lowest price
  49.         unique_id: se3_today_low_price
  50.         state: >
  51.          {% set data = namespace(prices=[]) %}
  52.           {% for state in today_price['SE3'] %}
  53.             {% set data.prices = data.prices + [(state.price / 1000)] %}
  54.           {% endfor %}
  55.           {{min(data.prices)}}
  56.         attributes:
  57.           data: >
  58.            {% set data = namespace(prices=[]) %}
  59.             {% for state in today_price['SE3'] %}
  60.               {# Denna rad är den enda som är ändrad #}
  61.               {% set data.prices = data.prices + [{'start': (state.start | as_datetime | as_local).isoformat(), 'end': (state.end | as_datetime | as_local).isoformat(), 'price': state.price/1000}] %}
  62.             {% endfor %}
  63.             {{data.prices}}
  64.  
  65.  
  66.  
  67.  
  68.  
  69. ************* Apex kort*****************
  70.  
  71. type: custom:apexcharts-card
  72. now:
  73.   show: true
  74.   label: Nu
  75. graph_span: 24h
  76. span:
  77.   start: day
  78. experimental:
  79.   color_threshold: true
  80. header:
  81.   title: Elpriser (spotpris per kWh)
  82.   show: true
  83.   show_states: true
  84.   colorize_states: true
  85. apex_config:
  86.   chart:
  87.     height: 332px
  88.   legend:
  89.     showForSingleSeries: true
  90.   yaxis:
  91.     min: -0.2
  92.     decimalsInFloat: 2
  93.     tickAmount: 10
  94.     forceNiceScale: true
  95.   xaxis:
  96.     labels:
  97.       datetimeFormatter:
  98.         hour: HH
  99. hours_12: false
  100. stacked: false
  101. all_series_config:
  102.   show:
  103.     datalabels: false
  104.     extremas: true
  105.   float_precision: 2
  106.   type: area
  107. series:
  108.   - entity: sensor.today_lowest_price
  109.     type: column
  110.     name: Idag
  111.     unit: SEK/kWh
  112.     show:
  113.       in_header: false
  114.       legend_value: false
  115.     data_generator: |
  116.      const data = entity.attributes.data;
  117.       if (!data || !Array.isArray(data)) { return []; }
  118.       return data.map(d => {
  119.         return [new Date(d.start).getTime(), d.price];
  120.       });
  121.     color_threshold:
  122.       - value: -1
  123.         color: "#00FFFF"
  124.       - value: 0.1
  125.         color: "#ADD8E6"
  126.       - value: 0.2
  127.         color: "#90EE90"
  128.       - value: 0.4
  129.         color: "#008000"
  130.       - value: 0.6
  131.         color: "#FFFF00"
  132.       - value: 0.8
  133.         color: "#FFA07A"
  134.       - value: 1
  135.         color: "#FFA500"
  136.       - value: 1.2
  137.         color: "#FF8C00"
  138.       - value: 1.4
  139.         color: "#FF6347"
  140.       - value: 1.6
  141.         color: "#FF4500"
  142.       - value: 1.8
  143.         color: "#FF0000"
  144.       - value: 2
  145.         color: "#B22222"
  146.       - value: 2.4
  147.         color: "#8B0000"
  148.       - value: 2.8
  149.         color: "#000000"
  150.   - entity: sensor.tomorrow_lowest_price
  151.     type: area
  152.     color: lightblue
  153.     name: Imorgon
  154.     unit: SEK/kWh
  155.     opacity: 0.4
  156.     stroke_width: 2
  157.     show:
  158.       in_header: false
  159.       legend_value: false
  160.     data_generator: |
  161.      const data = entity.attributes.data;
  162.       if (!data || !Array.isArray(data)) { return []; }
  163.       return data.map(d => {
  164.         const tomorrowDate = new Date(d.start);
  165.         const hour = tomorrowDate.getHours();
  166.         const minute = tomorrowDate.getMinutes();
  167.         const todayTimestamp = new Date().setHours(hour, minute, 0, 0);
  168.         return [todayTimestamp, d.price];
  169.       });
  170.   - entity: sensor.today_lowest_price
  171.     name: Nu
  172.     unit: SEK/kWh
  173.     show:
  174.       in_chart: false
  175.     data_generator: |
  176.      const data = entity.attributes.data;
  177.       if (!data || !Array.isArray(data)) { return []; }
  178.       const now = new Date();
  179.       const currentPriceData = data.find(d => {
  180.         const startTime = new Date(d.start);
  181.         const endTime = new Date(d.end);
  182.         return now >= startTime && now < endTime;
  183.       });
  184.       return currentPriceData ? [[now, currentPriceData.price]] : [];
  185.   - entity: sensor.today_lowest_price
  186.     name: Min idag
  187.     unit: SEK/kWh
  188.     show:
  189.       in_chart: false
  190.     data_generator: |
  191.      const data = entity.attributes.data;
  192.       if (!data || !Array.isArray(data) || data.length === 0) { return []; }
  193.       const prices = data.map(d => d.price);
  194.       return [[new Date(), Math.min(...prices)]];
  195.   - entity: sensor.today_lowest_price
  196.     name: Max idag
  197.     unit: SEK/kWh
  198.     show:
  199.       in_chart: false
  200.     data_generator: |
  201.      const data = entity.attributes.data;
  202.       if (!data || !Array.isArray(data) || data.length === 0) { return []; }
  203.       const prices = data.map(d => d.price);
  204.       return [[new Date(), Math.max(...prices)]];
  205.   - entity: sensor.today_lowest_price
  206.     name: Medel idag
  207.     unit: SEK/kWh
  208.     show:
  209.       in_chart: false
  210.     data_generator: |
  211.      const data = entity.attributes.data;
  212.       if (!data || !Array.isArray(data) || data.length === 0) { return []; }
  213.       const prices = data.map(d => d.price);
  214.       const sum = prices.reduce((a, b) => a + b, 0);
  215.       return [[new Date(), sum / prices.length]];
  216.  
Advertisement
Add Comment
Please, Sign In to add comment