{"id":1568,"date":"2024-10-21T20:07:52","date_gmt":"2024-10-21T18:07:52","guid":{"rendered":"https:\/\/caipirinha.spdns.org\/wp\/?p=1568"},"modified":"2024-10-21T20:13:05","modified_gmt":"2024-10-21T18:13:05","slug":"learnings-from-dynamic-electricity-pricing","status":"publish","type":"post","link":"https:\/\/caipirinha.spdns.org\/wp\/?p=1568","title":{"rendered":"Learnings from Dynamic Electricity Pricing"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Executive Summary<\/h2>\n\n\n\n<p>Unlike previous articles, I chose to split this new blog post into two parts. In the first part (<strong>Findings<\/strong>), I will elaborate on my findings as a consumer with <strong>dynamic electricity prices<\/strong> (day-ahead market) in connection with a small solar electricity generation unit. We will look at various visualizations that help to understand the impact and to gain some more insight in how dynamic electricity prices can be useful. In the second part (<strong>Annex: Technical Details<\/strong>), technically interested folks will find the respective queries and sample data with which they can replicate the findings or even do their own examination with the sample data. As in previous articles, <a href=\"https:\/\/grafana.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Grafana<\/a>&nbsp;is used in connection with a&nbsp;<a href=\"https:\/\/mariadb.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">MariaDB<\/a>&nbsp;database.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Background<\/h2>\n\n\n\n<p>On 1<sup>st<\/sup>&nbsp;of March 2024, I switched from a traditional electricity provider to one with dynamic day-ahead pricing, in my case,&nbsp;<a href=\"https:\/\/tibber.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Tibber<\/a>. I wanted to try this contractual model and see if I could successfully manage to shift chunks of high electricity consumption such as:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u2026 loading the battery-electric vehicle (BEV) or the plug-in hybrid car (PHEV)<\/li>\n\n\n\n<li>\u2026 washing clothes<\/li>\n\n\n\n<li>\u2026 drying clothes in the electric dryer<\/li>\n<\/ul>\n\n\n\n<p>to those times of the day when the electricity price is lower. I also wanted to see if that makes economic sense for me. And, after all, it is fun to play around with data and gain new insights.<\/p>\n\n\n\n<p>As my electricity supplier, I had chosen&nbsp;<a href=\"https:\/\/tibber.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Tibber<\/a>&nbsp;because they were the first one I got to know and they offer a device called&nbsp;<a href=\"https:\/\/tibber.com\/de\/store\/produkt\/pulse-ir\" target=\"_blank\" rel=\"noreferrer noopener\">Pulse<\/a>&nbsp;which can connect a digital electricity meter to their infrastructure for metering and billing purposes. Furthermore, they do have an API [<a href=\"https:\/\/developer.tibber.com\/docs\/overview\" target=\"_blank\" rel=\"noreferrer noopener\">1<\/a>] which allows me to read out my own data; that was very important for me. I understand that meanwhile, there are several providers&nbsp;<a href=\"https:\/\/tibber.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Tibber<\/a>&nbsp;that have similar models and comparable features.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Findings<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Price and consumption patterns<\/h3>\n\n\n\n<p>The graph below shows five curves and is an upgraded version of the respective graph in [<a href=\"https:\/\/caipirinha.spdns.org\/wp\/?p=1525\" target=\"_blank\" rel=\"noreferrer noopener\">6<\/a>] visualizing data over two weeks:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"425\" src=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Electricity-Price-and-Consumption-new-1024x425.jpg\" alt=\"\" class=\"wp-image-1573\" srcset=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Electricity-Price-and-Consumption-new-1024x425.jpg 1024w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Electricity-Price-and-Consumption-new-300x124.jpg 300w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Electricity-Price-and-Consumption-new-768x318.jpg 768w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Electricity-Price-and-Consumption-new.jpg 1336w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Price and Consumption<\/figcaption><\/figure>\n\n\n\n<p>As in [<a href=\"https:\/\/caipirinha.spdns.org\/wp\/?p=1525\" target=\"_blank\" rel=\"noreferrer noopener\">6<\/a>], the <strong>green<\/strong> curve is the hourly price of the day-ahead market. It is well recognizable that the price has peaks in the evening and in the morning at breakfast time when residential consumption is high, but little solar energy is available in Germany. The <strong>yellow<\/strong> curve is a two-days floating average and shows that the average price is not below a fixed rate electricity contract, an important point that we shall discuss later. The <strong>orange<\/strong> curve is the consumption of my house; the higher peaks indicate times when I charged one of the cars using an <a href=\"https:\/\/de.wikipedia.org\/wiki\/In-Kabel-Kontrollbox\" target=\"_blank\" rel=\"noreferrer noopener\">ICCB<\/a> (one phase, current: 10 A). The <strong>red<\/strong> curve shows the consumption of the grid. During the day, when there is sunshine, the red curve lies below the orange curve as a part of the overall consumed electricity comes from the solar panels. At nighttime, the red curve will exactly lie on the orange curve as there is no solar electricity generation. The <strong>blue<\/strong> curve shows the average electricity price per kWh based on a mixed calculation of the grid price and zero for my own solar electricity generation. One might argue whether <em>zero<\/em> is an adequate assumption as also solar panels cost money, but as I do have them installed already, I consider them to be <em>sunk cost<\/em> now. The blue curve show an interesting behavior: When my consumption is low, the blue curve shows a small average price. When the consumption of the house is less than the power that is generated by the solar panels, then the blue curve is flat zero. When, however, I consume a lot of power, then, the blue curve approaches the green curve. At nighttime when there is no solar energy generation, the blue curve lies identical with the green curve.<\/p>\n\n\n\n<p>My goal is to consume more electricity in the times when either the green curve points to a low electricity price or when there is enough electricity generated by the solar panels so that my average price that I pay (blue curve) is reasonable low. This also explains why I mostly the <a href=\"https:\/\/de.wikipedia.org\/wiki\/In-Kabel-Kontrollbox\" target=\"_blank\" rel=\"noreferrer noopener\">ICCB<\/a> (one phase, 10 A) to charge the cars as then, I still can get a good average price (although charging takes a lot more time then). I think that by looking at the curves, I have adapted my consumption pattern well to the varying electricity price.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Actual cost, minimal cost, maximal cost, average cost per day<\/h3>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"505\" src=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Actual-cost-versus-minimal-cost-maximal-cost-average-cost-per-day-1024x505.jpg\" alt=\"\" class=\"wp-image-1574\" srcset=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Actual-cost-versus-minimal-cost-maximal-cost-average-cost-per-day-1024x505.jpg 1024w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Actual-cost-versus-minimal-cost-maximal-cost-average-cost-per-day-300x148.jpg 300w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Actual-cost-versus-minimal-cost-maximal-cost-average-cost-per-day-768x379.jpg 768w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Actual-cost-versus-minimal-cost-maximal-cost-average-cost-per-day-1536x758.jpg 1536w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Actual-cost-versus-minimal-cost-maximal-cost-average-cost-per-day.jpg 1911w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Actual cost versus minimal cost, maximal cost, average cost per day<\/figcaption><\/figure>\n\n\n\n<p>The graph above shows four curves. The <strong>green<\/strong> curve is the cost that I would have incurred if I had bought all the electricity of the respective day in the hour of the cheapest electricity price. This would only be possible if I had a battery that could bridge the remaining 23 hours of the day (and probably some hours more as the <strong>cheapest<\/strong> hour of the following day is not necessarily 00:00-01:00). The <strong>red<\/strong> curve is the cost that I would have incurred if I had bought all the electricity of the respective day in the hour of the <strong>most expensive<\/strong> electricity price. The <strong>yellow<\/strong> curve is the <strong>average<\/strong> cost of the respective day, the multiplication of the average price per kWh of that day by my consumed energy. The <strong>blue<\/strong> curve is the real cost that I have paid. If the blue curve is between the yellow curve and the green curve, then this is very good, and I have succeeded in shifting my consumption versus the hours with cheaper electricity. Without a battery, it is almost impossible to come very close to the green line.<\/p>\n\n\n\n<p>The graph above shows one peculiarity as on 2024-06-26, there were some hours with an extremely high price, but that was due to a communication error that decoupled the auction in Germany from the rest of Europe [<a href=\"https:\/\/www.ispex.de\/extrempreise-strom-epex-spot-26-juni-2024\/\" target=\"_blank\" rel=\"noreferrer noopener\">7<\/a>], clearly (and hopefully) a one-time event.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Price heatmap of the hourly prices per kWh<\/h3>\n\n\n\n<p>The one-time event with unusually high prices [<a href=\"https:\/\/www.ispex.de\/extrempreise-strom-epex-spot-26-juni-2024\/\" target=\"_blank\" rel=\"noreferrer noopener\">7<\/a>] is well visible in the price heatmap that was already introduced and explained in [<a href=\"https:\/\/caipirinha.spdns.org\/wp\/?p=1525\" target=\"_blank\" rel=\"noreferrer noopener\">6<\/a>]. The one-time event overshadows all price fluctuations in the rest of the week.<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"505\" data-id=\"1577\" src=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Heatmap-of-the-Tibber-flexible-hourly-prices-per-kWh-1024x505.jpg\" alt=\"\" class=\"wp-image-1577\" srcset=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Heatmap-of-the-Tibber-flexible-hourly-prices-per-kWh-1024x505.jpg 1024w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Heatmap-of-the-Tibber-flexible-hourly-prices-per-kWh-300x148.jpg 300w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Heatmap-of-the-Tibber-flexible-hourly-prices-per-kWh-768x379.jpg 768w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Heatmap-of-the-Tibber-flexible-hourly-prices-per-kWh-1536x758.jpg 1536w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Heatmap-of-the-Tibber-flexible-hourly-prices-per-kWh.jpg 1915w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Price Heatmap with an extreme price event<\/figcaption><\/figure>\n<\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Cost and amount of purchased electricity from grid with price indication<\/h3>\n\n\n\n<p>The first graph shown below was already introduced and explained in [<a href=\"https:\/\/caipirinha.spdns.org\/wp\/?p=1525\" target=\"_blank\" rel=\"noreferrer noopener\">6<\/a>] and shows the cost of purchased electricity from the grid in 24 rectangles, whereby each rectangle represents an hour. The order of the rectangles starts with the most expensive hour at the top and ends with the least expensive hour at the bottom. The larger the rectangle, the more money has been spent in the respective hour. I already explained in [<a href=\"https:\/\/caipirinha.spdns.org\/wp\/?p=1525\" target=\"_blank\" rel=\"noreferrer noopener\">6<\/a>] that the goal should be &#8211; if electricity has to be purchased from the grid at all &#8211; the purchases ideally should happen in times when the price is low. In the graph those are the rectangles with green or at maximum yellow color. The rectangles with orange and red color indicate purchases during times of a high electricity price. In reality, one will not be able to avoid purchases at times of a high price completely. My experience is that in summer, I let the air conditioning systems run also in the evening hours when the electricity price is higher, just to keep the house at reasonable temperatures inside. Similarly, in spring and autumn, I opt for leaving the central heating switched off and try to heat the rooms in which I am usually with the air conditioning systems (in heating mode) as in spring and autumn, the difference in temperature between outside and inside is not too high, and the air conditioning systems will have a high efficiency.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"444\" src=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Cost-of-purchased-electricity-from-grid-with-price-indication-1024x444.jpg\" alt=\"\" class=\"wp-image-1578\" srcset=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Cost-of-purchased-electricity-from-grid-with-price-indication-1024x444.jpg 1024w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Cost-of-purchased-electricity-from-grid-with-price-indication-300x130.jpg 300w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Cost-of-purchased-electricity-from-grid-with-price-indication-768x333.jpg 768w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Cost-of-purchased-electricity-from-grid-with-price-indication.jpg 1338w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Cost of purchased electricity from grid with price indication<\/figcaption><\/figure>\n\n\n\n<p>Then, for 13-Oct (10\/13), one can see that in fact I bought substantial electricity at high prices. The reason for that was that I returned home at night and had to re-charge the car for the next day. So, one cannot always avoid purchasing electricity at high prices.<\/p>\n\n\n\n<p>The next chart offers another view on the same topic. Rather than looking at the cost of the purchased electricity, we look at the amount of purchased electricity. This offers an interesting insight. Except for 13-Oct, the amount of electricity that is purchased at hours with a high price, is less than 5 kWh. This means that with an energy-storage system (ESS), it should be possible to charge a battery of around 5 kWh during times of a lower electricity price and to discharge the battery and supply the house during times of a high electricity price so that ideally, there would be no or only minimally sized orange and red rectangles. Of course, this only makes sense if the low prices and the high prices per day differ substantially as the ESS will have losses of 10%&#8230;20%. And in fact, this is exactly an idea that I am planning to try out within the next months (so stay tuned).<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"445\" src=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Purchased-energy-from-grid-with-price-indication-1024x445.jpg\" alt=\"\" class=\"wp-image-1579\" srcset=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Purchased-energy-from-grid-with-price-indication-1024x445.jpg 1024w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Purchased-energy-from-grid-with-price-indication-300x130.jpg 300w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Purchased-energy-from-grid-with-price-indication-768x333.jpg 768w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Purchased-energy-from-grid-with-price-indication.jpg 1338w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Amount of purchased electricity from grid with price indication<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Hourly price distribution<\/h3>\n\n\n\n<p>Another finding which was interesting for me was that the price of electricity is not necessarily cheaper on the weekend (at least not in May 2024). One might assume that because industry consumption is low on the weekend, the price of electricity is lower. And that is true to some parts, as the lowest prices that occur within a whole month tend to happen on the weekend (<strong>green<\/strong> histogram). We can also see a peak at around 19 \u00a2\/kWh in the <strong>green<\/strong> histogram which is much lower in the <strong>yellow<\/strong> histogram. However, there are also many hours with prices that are similar to the prices that we have during the week (<strong>yellow<\/strong> histogram).<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"503\" src=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Histograms-1024x503.jpg\" alt=\"\" class=\"wp-image-1581\" srcset=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Histograms-1024x503.jpg 1024w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Histograms-300x147.jpg 300w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Histograms-768x378.jpg 768w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Histograms-1536x755.jpg 1536w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Histograms.jpg 1916w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Hourly price distribution histograms (here: May 2024)<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Monthly hourly price curves<\/h3>\n\n\n\n<p>The following three graphs show the hourly price curves over the hour of the day per month; the selected <em>Day of the Week<\/em> is irrelevant for this graph as only the variable <em>Month<\/em> is used.<\/p>\n\n\n\n<p>The <strong>green<\/strong> curve shows the minimum hourly price per kWh that occurred in the selected month. The <strong>red<\/strong> curve shows the maximum hourly price per kWh that occurred in the selected month. The <strong>yellow<\/strong> curve shows the average hourly price per kWh that occurred in the selected month. The <strong>blue<\/strong> curve shows the average hourly price per kWh that I have experienced in the selected month, calculating my own solar electricity generation as &#8220;free of cost&#8221; (like the blue curve of the graph in chapter <strong>Price and consumption patterns<\/strong>).<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"468\" src=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Hourly-Price-curves-in-2024-05-1024x468.jpg\" alt=\"\" class=\"wp-image-1582\" srcset=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Hourly-Price-curves-in-2024-05-1024x468.jpg 1024w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Hourly-Price-curves-in-2024-05-300x137.jpg 300w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Hourly-Price-curves-in-2024-05-768x351.jpg 768w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Hourly-Price-curves-in-2024-05-1536x702.jpg 1536w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Hourly-Price-curves-in-2024-05.jpg 1890w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Hourly price curves in May 2024<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"466\" src=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Hourly-Price-curves-in-2024-07-1024x466.jpg\" alt=\"\" class=\"wp-image-1583\" srcset=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Hourly-Price-curves-in-2024-07-1024x466.jpg 1024w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Hourly-Price-curves-in-2024-07-300x137.jpg 300w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Hourly-Price-curves-in-2024-07-768x350.jpg 768w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Hourly-Price-curves-in-2024-07-1536x700.jpg 1536w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Hourly-Price-curves-in-2024-07.jpg 1895w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Hourly price curves in July 2024<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"468\" src=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Hourly-Price-curves-in-2024-09-1024x468.jpg\" alt=\"\" class=\"wp-image-1584\" srcset=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Hourly-Price-curves-in-2024-09-1024x468.jpg 1024w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Hourly-Price-curves-in-2024-09-300x137.jpg 300w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Hourly-Price-curves-in-2024-09-768x351.jpg 768w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Hourly-Price-curves-in-2024-09-1536x702.jpg 1536w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Hourly-Price-curves-in-2024-09.jpg 1893w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Hourly price curves in Sep 2024<\/figcaption><\/figure>\n\n\n\n<p>There are a couple of interesting findings that can easily be seen in the curves:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Prices tend to be higher in the early morning (06:00-08:00) and in the evening (18:00-21:00). The evening price peak is higher than the one in the morning.<\/li>\n\n\n\n<li>The price gap in the morning, but especially in the evening hours between the minimum and the maximum hourly price seems to increase from May to September. I do not yet know if this is because of the season, or if the market has become more volatile in general.<\/li>\n\n\n\n<li>In my personal situation (the solar modules face East), I am not bothered by the price peak in the morning, as I seem to have already quite a good power generation (blue curve descending in the morning). That is, however, different in the evening; then, I am personally affected by the price peak.<\/li>\n<\/ul>\n\n\n\n<p>For me, this is an indication that it might make sense to install a battery and charge it during the day and discharge it especially in the evening hours (18:00-21:00) when the price peaks.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Electricity price levels<\/h3>\n\n\n\n<p>In order to look into the hourly prices from a different perspective, I have grouped the hourly prices into five categories:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Price per kWh <em>\u2264<\/em>10 \u00a2\/kWh (<strong>green<\/strong> block), labelled as <strong>very cheap<\/strong><\/li>\n\n\n\n<li>Price per kWh &gt;10 \u00a2\/kWh and <em>\u2264<\/em>20 \u00a2\/kWh (<strong>yellow<\/strong> block), labelled as <strong>cheap<\/strong><\/li>\n\n\n\n<li>Price per kWh &gt;20 \u00a2\/kWh and <em>\u2264<\/em>30 \u00a2\/kWh (<strong>blue<\/strong> block), labelled as <strong>normal<\/strong><\/li>\n\n\n\n<li>Price per kWh &gt;30 \u00a2\/kWh and <em>\u2264<\/em>40 \u00a2\/kWh (<strong>orange<\/strong> block), labelled as <strong>expensive<\/strong><\/li>\n\n\n\n<li>Price per kWh &gt;40 \u00a2\/kWh (<strong>red<\/strong> block), labelled as <strong>very expensive<\/strong><\/li>\n<\/ul>\n\n\n\n<p>For each month (except for Oct 2023, Oct 2024) the sum of the blocks in different colors are the hours of the respective month; depending on the number of days per month, the number of hours vary, of course. Larger blocks correspond to more hours in the respective price category. Do not pay attention to the numbers listed in the graph in <strong>white<\/strong> color as some numbers are missing. I will give a numerical statistic below the graph.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"466\" src=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Electricity-Price-Levels-1024x466.jpg\" alt=\"\" class=\"wp-image-1586\" srcset=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Electricity-Price-Levels-1024x466.jpg 1024w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Electricity-Price-Levels-300x136.jpg 300w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Electricity-Price-Levels-768x349.jpg 768w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Electricity-Price-Levels.jpg 1337w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Electricity price levels<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>Month<\/strong><\/td><td class=\"has-text-align-right\" data-align=\"right\"><strong>very cheap<br>(\u2264 10 \u00a2\/kWh)<\/strong><\/td><td class=\"has-text-align-right\" data-align=\"right\"><strong>cheap<br>(\u2264 20 \u00a2\/kWh)<\/strong><\/td><td class=\"has-text-align-right\" data-align=\"right\"><strong>normal<br>(\u2264 30 \u00a2\/kWh)<\/strong><\/td><td class=\"has-text-align-right\" data-align=\"right\"><strong>expensive<br>(\u2264 40 \u00a2\/kWh)<\/strong><\/td><td class=\"has-text-align-right\" data-align=\"right\"><strong>very expensive<br>(&gt; 40 \u00a2\/kWh)<\/strong><\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">2023-10<\/td><td class=\"has-text-align-right\" data-align=\"right\">0<\/td><td class=\"has-text-align-right\" data-align=\"right\">86<\/td><td class=\"has-text-align-right\" data-align=\"right\">248<\/td><td class=\"has-text-align-right\" data-align=\"right\">189<\/td><td class=\"has-text-align-right\" data-align=\"right\">6<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">2023-11<\/td><td class=\"has-text-align-right\" data-align=\"right\">0<\/td><td class=\"has-text-align-right\" data-align=\"right\">79<\/td><td class=\"has-text-align-right\" data-align=\"right\">431<\/td><td class=\"has-text-align-right\" data-align=\"right\">199<\/td><td class=\"has-text-align-right\" data-align=\"right\">11<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">2023-12<\/td><td class=\"has-text-align-right\" data-align=\"right\">0<\/td><td class=\"has-text-align-right\" data-align=\"right\">173<\/td><td class=\"has-text-align-right\" data-align=\"right\">392<\/td><td class=\"has-text-align-right\" data-align=\"right\">123<\/td><td class=\"has-text-align-right\" data-align=\"right\">8<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">2024-01<\/td><td class=\"has-text-align-right\" data-align=\"right\">0<\/td><td class=\"has-text-align-right\" data-align=\"right\">32<\/td><td class=\"has-text-align-right\" data-align=\"right\">625<\/td><td class=\"has-text-align-right\" data-align=\"right\">63<\/td><td class=\"has-text-align-right\" data-align=\"right\">0<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">2024-02<\/td><td class=\"has-text-align-right\" data-align=\"right\">0<\/td><td class=\"has-text-align-right\" data-align=\"right\">58<\/td><td class=\"has-text-align-right\" data-align=\"right\">635<\/td><td class=\"has-text-align-right\" data-align=\"right\">3<\/td><td class=\"has-text-align-right\" data-align=\"right\">0<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">2024-03<\/td><td class=\"has-text-align-right\" data-align=\"right\">0<\/td><td class=\"has-text-align-right\" data-align=\"right\">32<\/td><td class=\"has-text-align-right\" data-align=\"right\">633<\/td><td class=\"has-text-align-right\" data-align=\"right\">78<\/td><td class=\"has-text-align-right\" data-align=\"right\">0<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">2024-04<\/td><td class=\"has-text-align-right\" data-align=\"right\">0<\/td><td class=\"has-text-align-right\" data-align=\"right\">109<\/td><td class=\"has-text-align-right\" data-align=\"right\">491<\/td><td class=\"has-text-align-right\" data-align=\"right\">117<\/td><td class=\"has-text-align-right\" data-align=\"right\">5<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">2024-05<\/td><td class=\"has-text-align-right\" data-align=\"right\">8<\/td><td class=\"has-text-align-right\" data-align=\"right\">102<\/td><td class=\"has-text-align-right\" data-align=\"right\">423<\/td><td class=\"has-text-align-right\" data-align=\"right\">208<\/td><td class=\"has-text-align-right\" data-align=\"right\">3<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">2024-06<\/td><td class=\"has-text-align-right\" data-align=\"right\">1<\/td><td class=\"has-text-align-right\" data-align=\"right\">106<\/td><td class=\"has-text-align-right\" data-align=\"right\">353<\/td><td class=\"has-text-align-right\" data-align=\"right\">230<\/td><td class=\"has-text-align-right\" data-align=\"right\">30<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">2024-07<\/td><td class=\"has-text-align-right\" data-align=\"right\">0<\/td><td class=\"has-text-align-right\" data-align=\"right\">109<\/td><td class=\"has-text-align-right\" data-align=\"right\">383<\/td><td class=\"has-text-align-right\" data-align=\"right\">219<\/td><td class=\"has-text-align-right\" data-align=\"right\">9<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">2024-08<\/td><td class=\"has-text-align-right\" data-align=\"right\">0<\/td><td class=\"has-text-align-right\" data-align=\"right\">94<\/td><td class=\"has-text-align-right\" data-align=\"right\">297<\/td><td class=\"has-text-align-right\" data-align=\"right\">332<\/td><td class=\"has-text-align-right\" data-align=\"right\">21<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">2024-09<\/td><td class=\"has-text-align-right\" data-align=\"right\">0<\/td><td class=\"has-text-align-right\" data-align=\"right\">86<\/td><td class=\"has-text-align-right\" data-align=\"right\">360<\/td><td class=\"has-text-align-right\" data-align=\"right\">258<\/td><td class=\"has-text-align-right\" data-align=\"right\">16<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">2024-10<\/td><td class=\"has-text-align-right\" data-align=\"right\">0<\/td><td class=\"has-text-align-right\" data-align=\"right\">46<\/td><td class=\"has-text-align-right\" data-align=\"right\">305<\/td><td class=\"has-text-align-right\" data-align=\"right\">141<\/td><td class=\"has-text-align-right\" data-align=\"right\">10<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">Detailed statistic of monthly hours in different electricity price categories<\/figcaption><\/figure>\n\n\n\n<p>Before I had generated this graph and the ones of the previous chapter, my initial assumption had been that in summer, the prices would go down compared to winter. And to some part, this is true. There is a higher number of hours in the category  &#8220;<strong>cheap<\/strong>&#8221; (<strong>yellow<\/strong> block). However, the category &#8220;<strong>expensive<\/strong>&#8221; (<strong>orange<\/strong> block) increases even more in summer. And even the category &#8220;<strong>very expensive<\/strong>&#8221; (<strong>red<\/strong> block) becomes noticeable whereas the category &#8220;<strong>very cheap<\/strong>&#8221; (<strong>green<\/strong> block) does not manifest itself, not even in summer. I do not have an explanation for this; my assumption though is that maybe in winter, some fossil power stations are active that are switched off in summer and that therefore, the price is much more susceptible to the change in the electricity offer over the day. I suspect that during the day, there is mostly enough solar electricity generation, and in the evening, gas power stations need to be started that then determine the price level and lead to increased prices. However, I do not have any statistics underpinning this assumption.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Self-sufficiency (<em>Autarkie<\/em>) and sef-consumption (<em>Eigenverbrauch<\/em>)<\/h3>\n\n\n\n<p>I am not much of a friend of looking at the values of <strong>self-sufficiency<\/strong> (<em>de: Autarkie<\/em>) and <strong>self-consumption<\/strong> (<em>de: Eigenverbrauch<\/em>), and this is for the following reasons:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If you do not live in a place where an electricity grid is not available or where the grid is very unreliable, it does not make sense to strive for complete self-sufficiency. It is still economically best if you use your electricity during the day and consume electricity from the grid at night. Similarly, you will probably need to buy electricity from the grid in winter, at least in Central or Northern Europe as in winter, the output from your own solar electricity generation is usually insufficient to power the consumption of your house.<\/li>\n\n\n\n<li>The value for self-consumption varies strongly with your consumption pattern and with the solar intensity on the respective day. The only conclusion that you can draw from observing the self-consumption values over a longer time frame is:\n<ul class=\"wp-block-list\">\n<li>If your values are constantly low, then you probably have spent into too large of a solar system.<\/li>\n\n\n\n<li>If your values are constantly high or 100%, then it might make sense to add some more solar panels to your system.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>Nevertheless, for the sake of completion, here are some example values from July of this year.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"503\" src=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Self-sufficiency-and-self-consumption-rate-1024x503.jpg\" alt=\"\" class=\"wp-image-1589\" srcset=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Self-sufficiency-and-self-consumption-rate-1024x503.jpg 1024w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Self-sufficiency-and-self-consumption-rate-300x147.jpg 300w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Self-sufficiency-and-self-consumption-rate-768x377.jpg 768w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Self-sufficiency-and-self-consumption-rate-1536x755.jpg 1536w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Self-sufficiency-and-self-consumption-rate.jpg 1919w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Self-sufficiency (Autarkie) and sef-consumption (Eigenverbrauch)<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The field of dynamic electricity pricing is technically very interesting and certainly helps to sharpen awareness for the need to consume electricity precisely then, when there is a lot of it available.<\/li>\n\n\n\n<li>Economically, having a dynamic electricity price can make sense under certain conditions. I side with [<a href=\"https:\/\/www.youtube.com\/watch?v=v--_ft2KM9Q\" target=\"_blank\" rel=\"noreferrer noopener\">8<\/a>] when I say:\n<ul class=\"wp-block-list\">\n<li>For a household without an electric car or another large electricity consumer, it does not make sense to use dynamic electricity pricing. The consumption of the washing machine, the dryer, and the dishwasher are not large enough to really draw a benefit.<\/li>\n\n\n\n<li>For a household with an electric car that has a large battery (e.g., some 80+ kWh, unfortunately not my use case), it makes sense then when you have the flexibility to charge the car during times with a low electricity price.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Annex: Technical Details<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Preconditions<\/h3>\n\n\n\n<p>In order to use the approach described below, you should:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u2026 have access to a Linux machine or account<\/li>\n\n\n\n<li>\u2026 have a&nbsp;<a href=\"https:\/\/www.mysql.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">MySQL<\/a>&nbsp;or&nbsp;<a href=\"https:\/\/mariadb.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">MariaDB<\/a>&nbsp;database server installed, configured, up and running<\/li>\n\n\n\n<li>\u2026 have the package&nbsp;<a href=\"https:\/\/grafana.com\/grafana\/download\" target=\"_blank\" rel=\"noreferrer noopener\">Grafana<\/a>&nbsp;[<a href=\"https:\/\/grafana.com\/grafana\/download\" target=\"_blank\" rel=\"noreferrer noopener\">2<\/a>] installed, configured, up and running<\/li>\n\n\n\n<li>&#8230; have the package <a href=\"https:\/\/nodered.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">Node-RED<\/a> [<a href=\"https:\/\/nodered.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">3<\/a>] installed, configured, up and running<\/li>\n\n\n\n<li>&#8230; have access to the data of your own electricity consumption and pricing information of your supplier or use the dataset linked below in this blog<\/li>\n\n\n\n<li>\u2026 have some basic knowledge of how to operate in a Linux environment and some basic understanding of shell scripts<\/li>\n\n\n\n<li>&#8230; have read and understood the previous blog post <a href=\"https:\/\/caipirinha.spdns.org\/wp\/?p=1525\">[<a href=\"https:\/\/caipirinha.spdns.org\/wp\/?p=1525\" target=\"_blank\" rel=\"noreferrer noopener\">6<\/a>]<\/a>, especially the part on how to connect <a href=\"https:\/\/grafana.com\/grafana\/download\" target=\"_blank\" rel=\"noreferrer noopener\">Grafana<\/a> to the <a href=\"https:\/\/www.mysql.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">MySQL<\/a>\u00a0or\u00a0<a href=\"https:\/\/mariadb.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">MariaDB<\/a>\u00a0database server<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">The Database<\/h3>\n\n\n\n<p>The base for the following visualizations is a fully populated&nbsp;<a href=\"https:\/\/mariadb.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">MariaDB<\/a>&nbsp;database with the following structure:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Datenbank f\u00fcr Analysen mit Tibber\n# V2.0; 2024-09-12, Gabriel R\u00fceck &lt;gabriel@rueeck.de&gt;, &lt;gabriel@caipirinha.spdns.org&gt;\n# Delete existing databases\nREVOKE ALL ON tibber.* FROM 'gabriel';\nDROP DATABASE tibber;\n\n# Create a new database\nCREATE DATABASE tibber DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci;\nGRANT ALL ON tibber.* TO 'gabriel';\nUSE tibber;\nSET default_storage_engine=Aria;\n\nCREATE TABLE preise         (uid               INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,\\\n                             zeitstempel       DATETIME NOT NULL UNIQUE,\\\n                             preis             DECIMAL(5,4),\\\n                             niveau            ENUM('VERY_CHEAP','CHEAP','NORMAL','EXPENSIVE','VERY_EXPENSIVE'));\n\nCREATE TABLE verbrauch      (uid               INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,\\\n                             zeitstempel       DATETIME NOT NULL UNIQUE,\\\n                             energie           DECIMAL(5,3),\\\n                             kosten            DECIMAL(5,4));\n\nCREATE TABLE zaehler        (uid               INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,\\\n                             zeitstempel       TIMESTAMP NOT NULL DEFAULT UTC_TIMESTAMP,\\\n                             bezug             DECIMAL(9,3) DEFAULT NULL,\\\n                             erzeugung         DECIMAL(9,3) DEFAULT NULL,\\\n                             einspeisung       DECIMAL(9,3) DEFAULT NULL);\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Data Acquisition<\/h3>\n\n\n\n<p>Data for the <a href=\"https:\/\/mariadb.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">MariaDB<\/a>&nbsp;database is acquired with two different methods.<\/p>\n\n\n\n<p>The tables <em>preise<\/em> and <em>verbrauch<\/em> are populated with the following&nbsp;<a href=\"https:\/\/en.wikipedia.org\/wiki\/Bash_(Unix_shell)\" target=\"_blank\" rel=\"noreferrer noopener\">bash<\/a>&nbsp;script. You will need a valid API token of your <a href=\"https:\/\/tibber.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Tibber<\/a>&nbsp;account [<a href=\"https:\/\/developer.tibber.com\/docs\/guides\/calling-api\" target=\"_blank\" rel=\"noreferrer noopener\">4<\/a>]; in this script, you need to replace&nbsp;<em>_API_TOKEN<\/em>&nbsp;with your personal API token ([<a href=\"https:\/\/developer.tibber.com\/docs\/guides\/calling-api\" target=\"_blank\" rel=\"noreferrer noopener\">4<\/a>]) and&nbsp;<em>_HOME_ID<\/em>&nbsp;with your personal Home ID ([<a href=\"https:\/\/developer.tibber.com\/docs\/overview\" target=\"_blank\" rel=\"noreferrer noopener\">1<\/a>]). The script further assumes that the user&nbsp;<em>gabriel<\/em>&nbsp;can login to the MySQL database without further authentication; this can be achieved by writing the MySQL login information in the file&nbsp;<strong>~\/.my.cnf<\/strong>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#!\/bin\/bash\n#\n# Dieses Skript liest Daten f\u00fcr die Tibber-Datenbank und speichert das Ergebnis in einer MySQL-Datenbank ab.\n# Das Skript wird einmal pro Tag aufgerufen.\n#\n# V2.0; 2024-09-12, Gabriel R\u00fceck &lt;gabriel@rueeck.de&gt;, &lt;gabriel@caipirinha.spdns.org&gt;\n#\n# CONSTANTS\ndeclare -r    MYSQL_DATABASE='tibber'\ndeclare -r    MYSQL_SERVER='localhost'\ndeclare -r    MYSQL_USER='gabriel'\ndeclare -r    TIBBER_API_TOKEN='_API_TOKEN'\ndeclare -r    TIBBER_API_URL='https:\/\/api.tibber.com\/v1-beta\/gql'\ndeclare -r    TIBBER_HOME_ID='_HOME_ID'\n\n# VARIABLES\n\n# PROGRAM\n# Read price information for tomorrow\ncurl -s -S -H \"Authorization: Bearer ${TIBBER_API_TOKEN}\" -H \"Content-Type: application\/json\" -X POST -d  '{ \"query\": \"{viewer {home (id: \\\"'\"${TIBBER_HOME_ID}\"'\\\") {currentSubscription {priceInfo {tomorrow {total startsAt level }}}}}}\" }' \"${TIBBER_API_URL}\" | jq -r '.data.viewer.home.currentSubscription.priceInfo.tomorrow&#91;] | .total, .startsAt, .level' | while read cost; do\n  read LINE\n  read level\n  timestamp=$(echo \"${LINE%%+*}\" | tr 'T' ' ')\n  # Determine timezone offset and store the UTC datetime in the database\n  offset=\"${LINE:23}\"\n  mysql --default-character-set=utf8mb4 -B -N -r -D \"${MYSQL_DATABASE}\" -h ${MYSQL_SERVER} -u ${MYSQL_USER} -e \"INSERT INTO preise (zeitstempel,preis,niveau) VALUES (DATE_SUB(\\\"${timestamp}\\\",INTERVAL \\\"${offset}\\\" HOUR_MINUTE),${cost},\\\"${level}\\\");\"\ndone\n\n# Read consumption information from the past 24 hours\ncurl -s -S -H \"Authorization: Bearer ${TIBBER_API_TOKEN}\" -H \"Content-Type: application\/json\" -X POST -d  '{ \"query\": \"{viewer {home (id: \\\"'\"${TIBBER_HOME_ID}\"'\\\") {consumption (resolution: HOURLY, last: 24) {nodes {from to cost consumption}}}}}\" }' \"${TIBBER_API_URL}\" | jq -r '.data.viewer.home.consumption.nodes&#91;] | .from, .consumption, .cost' | while read LINE; do\n  read consumption\n  read cost\n  timestamp=$(echo \"${LINE%%+*}\" | tr 'T' ' ')\n  # Determine timezone offset and store the UTC datetime in the database\n  offset=\"${LINE:23}\"\n  mysql --default-character-set=utf8mb4 -B -N -r -D \"${MYSQL_DATABASE}\" -h ${MYSQL_SERVER} -u ${MYSQL_USER} -e \"INSERT INTO verbrauch (zeitstempel,energie,kosten) VALUES (DATE_SUB(\\\"${timestamp}\\\",INTERVAL \\\"${offset}\\\" HOUR_MINUTE),${consumption},${cost});\"\ndone<\/code><\/pre>\n\n\n\n<p>The table <em>zaehler<\/em> is populated via a <a href=\"https:\/\/nodered.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">Node-RED<\/a> flow that reads data from the <a href=\"https:\/\/tibber.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Tibber<\/a>&nbsp;API [<a href=\"https:\/\/developer.tibber.com\/docs\/guides\/calling-api\" target=\"_blank\" rel=\"noreferrer noopener\">4<\/a>] as well as from the <a href=\"https:\/\/avm.de\/\" target=\"_blank\" rel=\"noreferrer noopener\">AVM<\/a> socket <a href=\"https:\/\/avm.de\/produkte\/smart-home\/fritzdect-210\/\" target=\"_blank\" rel=\"noreferrer noopener\">FRITZ!DECT 210<\/a> and stores new values for the columns <em>bezug<\/em>, <em>erzeugung<\/em>, <em>einspeisung<\/em> every 15 minutes. I used a <a href=\"https:\/\/nodered.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">Node-RED<\/a> flow for this because otherwise, I would have to program code for the access of the <a href=\"https:\/\/tibber.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Tibber<\/a>&nbsp;API [<a href=\"https:\/\/developer.tibber.com\/docs\/guides\/calling-api\" target=\"_blank\" rel=\"noreferrer noopener\">4<\/a>] and include code [<a href=\"https:\/\/caipirinha.spdns.org\/wp\/?p=1450\" target=\"_blank\" rel=\"noreferrer noopener\">5<\/a>] for the <a href=\"https:\/\/avm.de\/\" target=\"_blank\" rel=\"noreferrer noopener\">AVM<\/a> socket <a href=\"https:\/\/avm.de\/produkte\/smart-home\/fritzdect-210\/\" target=\"_blank\" rel=\"noreferrer noopener\">FRITZ!DECT 210<\/a>. However, I do plan to enlarge the functionality later with an Energy Storage System (ESS) and a battery, and so <a href=\"https:\/\/nodered.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">Node-RED<\/a> seemed suitable to me. The flow is shown here; it contains some additional nodes apart from the now needed functionality, and it is still in development:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"406\" src=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Tibber-Flow-300-1024x406.jpg\" alt=\"\" class=\"wp-image-1572\" srcset=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Tibber-Flow-300-1024x406.jpg 1024w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Tibber-Flow-300-300x119.jpg 300w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Tibber-Flow-300-768x304.jpg 768w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Tibber-Flow-300-1536x609.jpg 1536w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Tibber-Flow-300-2048x811.jpg 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Node-RED Tibber Flow storing data in a MariaDB database<\/figcaption><\/figure>\n\n\n\n<p>I have decided not to publish the JSON code here as I am not yet entirely familiar with <a href=\"https:\/\/nodered.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">Node-RED<\/a> [<a href=\"https:\/\/nodered.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">3<\/a>] and would not know how to remove my personal tokens from the JSON code.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Queries for the Graphs<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Price and Consumption Patterns<\/h4>\n\n\n\n<p>The graph is based on four queries that correspond to the <strong>green<\/strong> and <strong>yellow<\/strong>, to the <strong>red<\/strong>, to the <strong>orange<\/strong> and to the <strong>blue<\/strong> curve:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT zeitstempel,\n       preis AS 'grid price',\n       AVG(preis) OVER (ORDER BY zeitstempel ROWS BETWEEN 47 PRECEDING AND CURRENT ROW) as 'rolling 2-days average grid price'\nFROM preise;\n\nSELECT zeitstempel, energie AS 'grid consumption' FROM verbrauch;\n\nSELECT alt.zeitstempel,\n       (neu.bezug-alt.bezug+neu.erzeugung-alt.erzeugung-neu.einspeisung+alt.einspeisung) AS 'residential consumption'\nFROM zaehler AS neu JOIN zaehler AS alt ON neu.uid=(alt.uid+4)\nWHERE MINUTE(alt.zeitstempel)=0;\n\nSELECT alt.zeitstempel,\n       ROUND(preise.preis*(neu.bezug-alt.bezug)\/(neu.bezug-alt.bezug+neu.erzeugung-alt.erzeugung-neu.einspeisung+alt.einspeisung),4) AS 'price for mixed grid\/solar'\nFROM zaehler AS neu\nJOIN zaehler AS alt ON neu.uid=(alt.uid+4)\nLEFT JOIN preise ON DATE_FORMAT(preise.zeitstempel, \"%Y%m%d%H%i\")=DATE_FORMAT(alt.zeitstempel, \"%Y%m%d%H%i\")\nWHERE MINUTE(alt.zeitstempel)=0\n  AND preise.zeitstempel&gt;=DATE_SUB(CURRENT_DATE(),INTERVAL 30 DAY);<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Actual cost, minimal cost, maximal cost, average cost per day<\/h4>\n\n\n\n<p>This graph uses only one query:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT DATE(preise.zeitstempel) AS 'date',\n       MIN(preise.preis)*SUM(verbrauch.energie) AS 'minimal cost',\n       MAX(preise.preis)*SUM(verbrauch.energie) AS 'maximal cost',\n       AVG(preise.preis)*SUM(verbrauch.energie) AS 'average cost',\n       SUM(verbrauch.kosten) AS 'actual cost'\nFROM preise JOIN verbrauch ON verbrauch.zeitstempel=preise.zeitstempel\nWHERE DATE(preise.zeitstempel)&gt;'2024-03-03'\nGROUP BY DATE(preise.zeitstempel);<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Cost and amount of purchased electricity from grid with price indication<\/h4>\n\n\n\n<p>The first graph (Cost of purchased electricity from grid with price indication) uses the query:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT DATE_FORMAT(preise.zeitstempel,'%m\/%d') AS 'Datum',\n       ROW_NUMBER() OVER (PARTITION BY DATE(preise.zeitstempel) ORDER BY preise.preis ASC) AS 'Row',\n\t   verbrauch.kosten AS 'Kosten'\nFROM preise JOIN verbrauch ON verbrauch.zeitstempel=preise.zeitstempel\nWHERE DATE(preise.zeitstempel)&gt;DATE_ADD(CURDATE(), INTERVAL -15 DAY)\nORDER BY DATE(preise.zeitstempel) ASC, preise.preis ASC;<\/code><\/pre>\n\n\n\n<p>The second graph (Amount of purchased electricity from grid with price indication) uses the query:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT DATE_FORMAT(preise.zeitstempel,'%m\/%d') AS 'Datum',\n       ROW_NUMBER() OVER (PARTITION BY DATE(preise.zeitstempel) ORDER BY preise.preis ASC) AS 'Row',\n\t   verbrauch.energie AS 'Energie'\nFROM preise JOIN verbrauch ON verbrauch.zeitstempel=preise.zeitstempel\nWHERE DATE(preise.zeitstempel)&gt;DATE_ADD(CURDATE(), INTERVAL -15 DAY)\nORDER BY DATE(preise.zeitstempel) ASC, preise.preis ASC;<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Hourly price distribution<\/h4>\n\n\n\n<p>The <strong>red<\/strong> histogram uses the query:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT preis FROM preise WHERE DATE_FORMAT(zeitstempel,'%Y-%m')='${Month}';<\/code><\/pre>\n\n\n\n<p>The <strong>blue<\/strong> histogram uses the query:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT preis FROM preise\nWHERE DATE_FORMAT(zeitstempel,'%Y-%m')='${Month}'\n  AND DAYNAME(zeitstempel)='${Weekday}';<\/code><\/pre>\n\n\n\n<p>The <strong>yellow<\/strong> histogram uses the query:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT preis FROM preise\nWHERE DATE_FORMAT(zeitstempel,'%Y-%m')='${Month}'\n  AND WEEKDAY(zeitstempel)&lt;5\n  AND DATE(zeitstempel) NOT IN (SELECT datum FROM aux_feiertage);<\/code><\/pre>\n\n\n\n<p>The <strong>green<\/strong> histogram uses the query:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT preis FROM preise\nWHERE DATE_FORMAT(zeitstempel,'%Y-%m')='${Month}'\n  AND WEEKDAY(zeitstempel)&gt;=5\n  OR DATE(zeitstempel) IN (SELECT datum FROM aux_feiertage WHERE DATE_FORMAT(zeitstempel,'%Y-%m')='${Month}');<\/code><\/pre>\n\n\n\n<p>The tables use these <strong>variables<\/strong> on the respective <a href=\"https:\/\/grafana.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Grafana<\/a>&nbsp;dasboard as well as the additional helper table <strong>aux_feiertage<\/strong> (indicating national holidays) in the <a href=\"https:\/\/mariadb.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">MariaDB<\/a>&nbsp;database.<\/p>\n\n\n\n<p>The variable <strong>Month<\/strong> on the <a href=\"https:\/\/grafana.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Grafana<\/a>&nbsp;dasboard has the query:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT DISTINCT(DATE_FORMAT(zeitstempel,'%Y-%m')) FROM preise;<\/code><\/pre>\n\n\n\n<p>The variable <strong>Weekday<\/strong> on the <a href=\"https:\/\/grafana.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Grafana<\/a>&nbsp;dasboard has the query:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT aux_wochentage.wochentag AS Weekday\nFROM aux_wochentage JOIN aux_sprachen ON aux_sprachen.id_sprache=aux_wochentage.id_sprache\nWHERE aux_sprachen.sprachcode='en'\nORDER BY aux_wochentage.id_tag ASC;<\/code><\/pre>\n\n\n\n<p>The last query also uses the tables <strong>aux_wochentage<\/strong> and <strong>aux_sprachen<\/strong> in order to offer a multi-lingual interface (not really necessary for the functionality). The tables are:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CREATE TABLE aux_wochentage (id_tag            TINYINT UNSIGNED NOT NULL,\\\n                             id_sprache        TINYINT UNSIGNED NOT NULL,\\\n                             wochentag         VARCHAR(30) NOT NULL);\n\nCREATE TABLE aux_sprachen   (id_sprache        TINYINT UNSIGNED NOT NULL PRIMARY KEY,\\\n                             sprachcode        CHAR(2),\\\n                             sprache           VARCHAR(30));\n\nCREATE TABLE aux_feiertage  (uid               SMALLINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,\\\n                             datum             DATE NOT NULL,\\\n                             beschreibung      VARCHAR(50));\n\nINSERT INTO aux_sprachen   VALUES (0,'en','English'),\\\n                                  (1,'de','Deutsch'),\\\n                                  (2,'pt','Portugu\u00eas'),\\\n                                  (3,'zh','\u4e2d\u6587');\n\nINSERT INTO aux_wochentage VALUES (0,0,'Monday'),\\\n                                  (1,0,'Tuesday'),\\\n                                  (2,0,'Wednesday'),\\\n                                  (3,0,'Thursday'),\\\n                                  (4,0,'Friday'),\\\n                                  (5,0,'Saturday'),\\\n                                  (6,0,'Sunday'),\\\n                                  (0,1,'Montag'),\\\n                                  (1,1,'Dienstag'),\\\n                                  (2,1,'Mittwoch'),\\\n                                  (3,1,'Donnerstag'),\\\n                                  (4,1,'Freitag'),\\\n                                  (5,1,'Samstag'),\\\n                                  (6,1,'Sonntag'),\\\n                                  (0,2,'segunda-feira'),\\\n                                  (1,2,'ter\u00e7a-feira'),\\\n                                  (2,2,'quarta-feira'),\\\n                                  (3,2,'quinta-feira'),\\\n                                  (4,2,'sexta-feira'),\\\n                                  (5,2,'s\u00e1bado'),\\\n                                  (6,2,'domingo'),\\\n                                  (0,3,'\u661f\u671f\u4e00'),\\\n                                  (1,3,'\u661f\u671f\u4e8c'),\\\n                                  (2,3,'\u661f\u671f\u4e09'),\\\n                                  (3,3,'\u661f\u671f\u56db'),\\\n                                  (4,3,'\u661f\u671f\u4e94'),\\\n                                  (5,3,'\u661f\u671f\u516d'),\\\n                                  (6,3,'\u661f\u671f\u65e5');\n\nINSERT INTO aux_feiertage (datum, beschreibung) VALUES ('2023-01-01','Neujahr'),\\\n                               ('2023-01-06','Heilige Drei K\u00f6nige'),\\\n                               ('2023-04-07','Karfreitag'),\\\n                               ('2023-04-10','Ostermontag'),\\\n                               ('2023-05-01','Tag der Arbeit'),\\\n                               ('2023-05-18','Christi Himmelfahrt'),\\\n                               ('2023-05-29','Pfingstmontag'),\\\n                               ('2023-06-08','Fronleichnam'),\\\n                               ('2023-08-15','Mari\u00e4 Himmelfahrt'),\\\n                               ('2023-10-03','Tag der Deutschen Einheit'),\\\n                               ('2023-11-01','Allerheiligen'),\\\n                               ('2023-12-25','1. Weihnachtstag'),\\\n                               ('2023-12-26','2. Weihnachtstag'),\\\n                               ('2024-01-01','Neujahr'),\\\n                               ('2024-01-06','Heilige Drei K\u00f6nige'),\\\n                               ('2024-03-29','Karfreitag'),\\\n                               ('2024-04-01','Ostermontag'),\\\n                               ('2024-05-01','Tag der Arbeit'),\\\n                               ('2024-05-09','Christi Himmelfahrt'),\\\n                               ('2024-05-20','Pfingstmontag'),\\\n                               ('2024-05-30','Fronleichnam'),\\\n                               ('2024-08-15','Mari\u00e4 Himmelfahrt'),\\\n                               ('2024-10-03','Tag der Deutschen Einheit'),\\\n                               ('2024-11-01','Allerheiligen'),\\\n                               ('2024-12-25','1. Weihnachtstag'),\\\n                               ('2024-12-26','2. Weihnachtstag'),\\\n                               ('2025-01-01','Neujahr'),\\\n                               ('2025-01-06','Heilige Drei K\u00f6nige'),\\\n                               ('2025-04-18','Karfreitag'),\\\n                               ('2025-04-21','Ostermontag'),\\\n                               ('2025-05-01','Tag der Arbeit'),\\\n                               ('2025-05-29','Christi Himmelfahrt'),\\\n                               ('2025-06-09','Pfingstmontag'),\\\n                               ('2025-06-19','Fronleichnam'),\\\n                               ('2025-08-15','Mari\u00e4 Himmelfahrt'),\\\n                               ('2025-10-03','Tag der Deutschen Einheit'),\\\n                               ('2025-11-01','Allerheiligen'),\\\n                               ('2025-12-25','1. Weihnachtstag'),\\\n                               ('2025-12-26','2. Weihnachtstag');<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Monthly hourly price curves<\/h4>\n\n\n\n<p>This graph uses only one query:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT preise.zeitstempel AS 'time',\n       MIN(preise.preis) AS 'Minimum Price',\n       ROUND(AVG(preise.preis),4) AS 'Average Price',\n       MAX(preise.preis) AS 'Maximum Price',\n       ROUND((SUM(verbrauch.kosten)\/(SUM(neu.bezug)-SUM(alt.bezug)+SUM(neu.erzeugung)-SUM(alt.erzeugung)-SUM(neu.einspeisung)+SUM(alt.einspeisung))),4) AS 'Achieved (Mixed) Price'\nFROM preise\n   INNER JOIN verbrauch ON preise.zeitstempel=verbrauch.zeitstempel\n   LEFT JOIN zaehler AS alt ON DATE_FORMAT(alt.zeitstempel,\"%Y%m%d%H%i\")=DATE_FORMAT(preise.zeitstempel,\"%Y%m%d%H%i\")\n   INNER JOIN zaehler AS neu ON neu.uid=(alt.uid+4)\nWHERE DATE_FORMAT(preise.zeitstempel,'%Y-%m')='${Month}'\nGROUP BY TIME(preise.zeitstempel);<\/code><\/pre>\n\n\n\n<p>It is important to keep in mind that the results from the query show the timespan of the first day of the month (and only the first day) between 00:00 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Coordinated_Universal_Time\" target=\"_blank\" rel=\"noreferrer noopener\">UTC<\/a> and 23:59 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Coordinated_Universal_Time\" target=\"_blank\" rel=\"noreferrer noopener\">UTC<\/a>; hence the <strong>time window<\/strong> on the <a href=\"https:\/\/grafana.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Grafana<\/a>&nbsp;dashboard has to be chosen accordingly (e.g. from 2024-07-01 02:00:00 to 2024-07-02 01:00:00 in the timezone <a href=\"https:\/\/en.wikipedia.org\/wiki\/Central_European_Summer_Time\" target=\"_blank\" rel=\"noreferrer noopener\">CEST<\/a>).<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Electricity price levels<\/h4>\n\n\n\n<p>This graph uses only one query:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT DATE_FORMAT(zeitstempel,'%Y-%m') AS 'Month',\n        COUNT(CASE WHEN preis&lt;=0.1 THEN preis END) AS 'very cheap (\u2264 0.10 \u20ac\/kWh)',\n        COUNT(CASE WHEN preis&gt;0.1 AND preis&lt;=0.2 THEN preis END) AS 'cheap (\u2264 0.20 \u20ac\/kWh)',\n        COUNT(CASE WHEN preis&gt;0.2 AND preis&lt;=0.3 THEN preis END) AS 'normal (\u2264 0.30 \u20ac\/kWh)',\n        COUNT(CASE WHEN preis&gt;0.3 AND preis&lt;=0.4 THEN preis END) AS 'expensive (\u2264 0.40 \u20ac\/kWh)',\n        COUNT(CASE WHEN preis&gt;0.4 THEN preis END) AS 'very expensive (&gt; 0.40 \u20ac\/kWh)'\nFROM preise\nGROUP BY Month;<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Self-sufficiency (<em>Autarkie<\/em>) and sef-consumption (<em>Eigenverbrauch<\/em>)<\/h4>\n\n\n\n<p>This graph uses only one query:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT DATE_FORMAT(alt.zeitstempel,'%m\/%d') AS 'Datum',\n       ROUND((neu.erzeugung-alt.erzeugung-neu.einspeisung+alt.einspeisung)*100\/(neu.bezug-alt.bezug+neu.erzeugung-alt.erzeugung-neu.einspeisung+alt.einspeisung)) AS 'Autarkiegrad',\n       ROUND((neu.erzeugung-alt.erzeugung-neu.einspeisung+alt.einspeisung)*100\/(neu.erzeugung-alt.erzeugung)) AS 'Eigenverbrauchsquote'\nFROM zaehler AS neu\nJOIN zaehler AS alt ON neu.uid=(alt.uid+96)\nWHERE HOUR(alt.zeitstempel)=0\n  AND MINUTE(alt.zeitstempel)=0\n  AND alt.zeitstempel&gt;=DATE_SUB(CURRENT_DATE(),INTERVAL 14 DAY);\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Files<\/h3>\n\n\n\n<p>The following dataset was used for the graphs:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/caipirinha.spdns.org\/~gabriel\/Blog\/tibber2.sql.gz\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/caipirinha.spdns.org\/~gabriel\/Blog\/tibber2.sql.gz<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Sources<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>[<a href=\"https:\/\/developer.tibber.com\/docs\/overview\" target=\"_blank\" rel=\"noreferrer noopener\">1<\/a>] =&nbsp;<a href=\"https:\/\/developer.tibber.com\/docs\/overview\" target=\"_blank\" rel=\"noreferrer noopener\">Tibber Developer<\/a><\/li>\n\n\n\n<li>[<a href=\"https:\/\/grafana.com\/grafana\/download\" target=\"_blank\" rel=\"noreferrer noopener\">2<\/a>] =&nbsp;<a href=\"https:\/\/grafana.com\/grafana\/download\" target=\"_blank\" rel=\"noreferrer noopener\">Download Grafana | Grafana Labs<\/a><\/li>\n\n\n\n<li>[<a href=\"https:\/\/nodered.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">3<\/a>] = <a href=\"https:\/\/nodered.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">Node-RED<\/a><\/li>\n\n\n\n<li>[<a href=\"https:\/\/developer.tibber.com\/docs\/guides\/calling-api\" target=\"_blank\" rel=\"noreferrer noopener\">4<\/a>] = <a href=\"https:\/\/developer.tibber.com\/docs\/guides\/calling-api\" target=\"_blank\" rel=\"noreferrer noopener\">Tibber Developer: Communicating with the API<\/a><\/li>\n\n\n\n<li>[<a href=\"https:\/\/caipirinha.spdns.org\/wp\/?p=1450\" target=\"_blank\" rel=\"noreferrer noopener\">5<\/a>] = <a href=\"https:\/\/caipirinha.spdns.org\/wp\/?p=1450\" target=\"_blank\" rel=\"noreferrer noopener\">Smarthome: AVM-Steckdosen per Skript auslesen<\/a><\/li>\n\n\n\n<li>[<a href=\"https:\/\/caipirinha.spdns.org\/wp\/?p=1525\" target=\"_blank\" rel=\"noreferrer noopener\">6<\/a>] = <a href=\"https:\/\/caipirinha.spdns.org\/wp\/?p=1525\" target=\"_blank\" rel=\"noreferrer noopener\">Grafana Visualizations (Part 2)<\/a><\/li>\n\n\n\n<li>[<a href=\"https:\/\/www.ispex.de\/extrempreise-strom-epex-spot-26-juni-2024\/\" target=\"_blank\" rel=\"noreferrer noopener\">7<\/a>] = <a href=\"https:\/\/www.ispex.de\/extrempreise-strom-epex-spot-26-juni-2024\/\" target=\"_blank\" rel=\"noreferrer noopener\">Strom: heute Extrempreise f\u00fcr Kunden im EPEX SPOT &#8211; ISPEX<\/a><\/li>\n\n\n\n<li>[<a href=\"https:\/\/www.youtube.com\/watch?v=v--_ft2KM9Q\" target=\"_blank\" rel=\"noreferrer noopener\">8<\/a>] = <a href=\"https:\/\/www.youtube.com\/watch?v=v--_ft2KM9Q\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><a href=\"https:\/\/www.youtube.com\/watch?v=v--_ft2KM9Q\" target=\"_blank\" rel=\"noreferrer noopener\">Dynamischer Stromtarif &#8211; Warum fallen ALLE darauf rein?<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Disclaimer<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Program codes and examples are for demonstration purposes only.<\/li>\n\n\n\n<li>Program codes are not recommended be used in production environments without further enhancements in terms of speed, failure-tolerance or cyber-security.<\/li>\n\n\n\n<li>While program codes have been tested, they might still contain errors.<\/li>\n\n\n\n<li>I am neither affiliated nor linked to companies named in this blog post.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>In this article, we will look into my findings as consumer with dynamic electricity prices (day-ahead market) in connection with a small solar electricity generation unit. We will look at various visualizations that help to understand the impact and to gain some more insight in how dynamic electricity prices can be useful.<\/p>\n","protected":false},"author":1,"featured_media":1579,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[108,35,107],"tags":[114,112,113],"class_list":["post-1568","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-energy-transition","category-it","category-statistics","tag-day-ahead","tag-grafana","tag-tibber"],"_links":{"self":[{"href":"https:\/\/caipirinha.spdns.org\/wp\/index.php?rest_route=\/wp\/v2\/posts\/1568","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/caipirinha.spdns.org\/wp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/caipirinha.spdns.org\/wp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/caipirinha.spdns.org\/wp\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/caipirinha.spdns.org\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1568"}],"version-history":[{"count":12,"href":"https:\/\/caipirinha.spdns.org\/wp\/index.php?rest_route=\/wp\/v2\/posts\/1568\/revisions"}],"predecessor-version":[{"id":2263,"href":"https:\/\/caipirinha.spdns.org\/wp\/index.php?rest_route=\/wp\/v2\/posts\/1568\/revisions\/2263"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/caipirinha.spdns.org\/wp\/index.php?rest_route=\/wp\/v2\/media\/1579"}],"wp:attachment":[{"href":"https:\/\/caipirinha.spdns.org\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1568"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/caipirinha.spdns.org\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1568"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/caipirinha.spdns.org\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1568"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}