SHOW:
|
|
- or go back to the newest paste.
| 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 |