{"id":1939,"date":"2021-12-04T18:59:04","date_gmt":"2021-12-04T17:59:04","guid":{"rendered":"http:\/\/sickel.net\/blogg\/?p=1939"},"modified":"2021-12-04T19:06:08","modified_gmt":"2021-12-04T18:06:08","slug":"presenter-strompris-og-vaervarsel-i-grafana","status":"publish","type":"post","link":"http:\/\/sickel.net\/blogg\/?p=1939","title":{"rendered":"Presenter str\u00f8mpris og v\u00e6rvarsel i grafana"},"content":{"rendered":"\n<p>Plutselig m\u00e5tte man holde \u00f8ye med str\u00f8mprisene og tenke litt p\u00e5 hva man gj\u00f8r n\u00e5r. Dersom man har en str\u00f8mleverand\u00f8r som tilbyr et API for str\u00f8mforbruk og str\u00f8mpriser, slik som <a rel=\"noreferrer noopener\" href=\"http:\/\/tibber.no\" data-type=\"URL\" data-id=\"tibber.no\" target=\"_blank\">tibber<\/a> gir det en del muligheter.<\/p>\n\n\n\n<p>I <a rel=\"noreferrer noopener\" href=\"https:\/\/developer.tibber.com\/explorer\" target=\"_blank\">tibbers api<\/a> er det blant annet mulig \u00e5 hente str\u00f8mforbruke og str\u00f8mpriser for lang tid tilbake og str\u00f8mpriser for innev\u00e6rende og kommende dag. (Sistnevnte n\u00e5r den er satt). N\u00e5r man har hentet en API-token, kan str\u00f8mprisene kan hentes ned:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\/usr\/bin\/curl -H \"Authorization: Bearer &lt;min token&gt;\" -H \"Content-Type: application\/json\" -X POST -d '{\"query\":\"{ viewer { homes { currentSubscription{ priceInfo{ current{ total energy tax startsAt } today { total energy tax startsAt } tomorrow { total energy tax startsAt } } } } } }\"}' https:\/\/api.tibber.com\/v1-beta\/gql &gt; \/var\/www\/html\/temp\/cost.json<\/pre>\n\n\n\n<p>Jeg  kj\u00f8rer dette fra cron med passende intervall og lagrer datasettet til en katalog som en webserver har tilgang til, s\u00e5 bruker jeg grafana til \u00e5 presentere data:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"http:\/\/sickel.net\/blogg\/wp-content\/2021\/12\/Screenshot_2021-12-04-Stromforbruk-Grafana.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"231\" data-attachment-id=\"1940\" data-permalink=\"http:\/\/sickel.net\/blogg\/?attachment_id=1940\" data-orig-file=\"http:\/\/sickel.net\/blogg\/wp-content\/2021\/12\/Screenshot_2021-12-04-Stromforbruk-Grafana.png\" data-orig-size=\"1358,306\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Screenshot_2021-12-04-Stromforbruk-Grafana\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"http:\/\/sickel.net\/blogg\/wp-content\/2021\/12\/Screenshot_2021-12-04-Stromforbruk-Grafana-1024x231.png\" src=\"http:\/\/sickel.net\/blogg\/wp-content\/2021\/12\/Screenshot_2021-12-04-Stromforbruk-Grafana-1024x231.png\" alt=\"\" class=\"wp-image-1940\" srcset=\"http:\/\/sickel.net\/blogg\/wp-content\/2021\/12\/Screenshot_2021-12-04-Stromforbruk-Grafana-1024x231.png 1024w, http:\/\/sickel.net\/blogg\/wp-content\/2021\/12\/Screenshot_2021-12-04-Stromforbruk-Grafana-300x68.png 300w, http:\/\/sickel.net\/blogg\/wp-content\/2021\/12\/Screenshot_2021-12-04-Stromforbruk-Grafana-768x173.png 768w, http:\/\/sickel.net\/blogg\/wp-content\/2021\/12\/Screenshot_2021-12-04-Stromforbruk-Grafana.png 1358w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>Dette viser n\u00e5v\u00e6rende str\u00f8mpris (1.85 \/ kWh) og forventet utvikling for innev\u00e6rende og neste dag<\/figcaption><\/figure>\n\n\n\n<p>For \u00e5 hente dette inn i grafana, m\u00e5 jeg f\u00f8rst lage en datakilde. Jeg bruker <a rel=\"noreferrer noopener\" href=\"https:\/\/grafana.com\/grafana\/plugins\/marcusolsson-json-datasource\/\" target=\"_blank\">JSON API<\/a> datakilden. Denne setter jeg opp s\u00e5 webserveren henter inn jsonfilen jeg lagret. (http:\/\/&lt;webserver&gt;\/temp\/cost.json).<\/p>\n\n\n\n<p>N\u00e5r jeg har hentet json filen inn i grafana, m\u00e5 jeg hente ut dataene jeg \u00f8nsker. Dette settes opp med jsonpath queries. Jeg m\u00e5 gi grafana tidspunktene og prisene. For \u00e5 f\u00e5 dette m\u00e5 jeg sette opp en datakilde med to felt:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$.data.viewer.homes[*].currentSubscription.priceInfo.today[*].startsAt\n$.data.viewer.homes[*].currentSubscription.priceInfo.today[*].total<\/pre>\n\n\n\n<p>Det f\u00f8rste feltet gir et  starttidspunkt, det andre gir prisen fra det tidspunktet. Dataene ligger i to sett, et for innev\u00e6rende dag og et for neste dag, dermed m\u00e5 man sette opp en datakilde til hvor feltene i stedet inneholder priceInfo.tomorrow. Siden grafana i utgangspunktet er et system for \u00e5 logge noe som har skjedd, m\u00e5 det trikses til litt for \u00e5 f\u00e5 plottet data for fremtiden. G\u00e5 inn p\u00e5 query options og sett &#8220;Relative time&#8221; til &#8220;+2d&#8221; <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"http:\/\/sickel.net\/blogg\/wp-content\/2021\/12\/Screenshot_2021-12-04-Stromforbruk-Grafana1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"525\" data-attachment-id=\"1941\" data-permalink=\"http:\/\/sickel.net\/blogg\/?attachment_id=1941\" data-orig-file=\"http:\/\/sickel.net\/blogg\/wp-content\/2021\/12\/Screenshot_2021-12-04-Stromforbruk-Grafana1.png\" data-orig-size=\"1500,769\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Screenshot_2021-12-04-Stromforbruk-Grafana1\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"http:\/\/sickel.net\/blogg\/wp-content\/2021\/12\/Screenshot_2021-12-04-Stromforbruk-Grafana1-1024x525.png\" src=\"http:\/\/sickel.net\/blogg\/wp-content\/2021\/12\/Screenshot_2021-12-04-Stromforbruk-Grafana1-1024x525.png\" alt=\"\" class=\"wp-image-1941\" srcset=\"http:\/\/sickel.net\/blogg\/wp-content\/2021\/12\/Screenshot_2021-12-04-Stromforbruk-Grafana1-1024x525.png 1024w, http:\/\/sickel.net\/blogg\/wp-content\/2021\/12\/Screenshot_2021-12-04-Stromforbruk-Grafana1-300x154.png 300w, http:\/\/sickel.net\/blogg\/wp-content\/2021\/12\/Screenshot_2021-12-04-Stromforbruk-Grafana1-768x394.png 768w, http:\/\/sickel.net\/blogg\/wp-content\/2021\/12\/Screenshot_2021-12-04-Stromforbruk-Grafana1.png 1500w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>Den enkleste m\u00e5ten \u00e5 f\u00e5 ut aktuell str\u00f8mpris er \u00e5 bruke priceInfo.current som et datasett<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$.data.viewer.homes[*].currentSubscription.priceInfo.current.total <\/pre>\n\n\n\n<p>Disse dataene kan ogs\u00e5 kombineres med <a href=\"http:\/\/sickel.net\/blogg\/?p=1923\">temperaturvarsel<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"http:\/\/sickel.net\/blogg\/wp-content\/2021\/12\/Screenshot_2021-12-04-Stromforbruk-Grafana2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"291\" data-attachment-id=\"1944\" data-permalink=\"http:\/\/sickel.net\/blogg\/?attachment_id=1944\" data-orig-file=\"http:\/\/sickel.net\/blogg\/wp-content\/2021\/12\/Screenshot_2021-12-04-Stromforbruk-Grafana2.png\" data-orig-size=\"1082,307\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Screenshot_2021-12-04-Stromforbruk-Grafana2\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"http:\/\/sickel.net\/blogg\/wp-content\/2021\/12\/Screenshot_2021-12-04-Stromforbruk-Grafana2-1024x291.png\" src=\"http:\/\/sickel.net\/blogg\/wp-content\/2021\/12\/Screenshot_2021-12-04-Stromforbruk-Grafana2-1024x291.png\" alt=\"\" class=\"wp-image-1944\" srcset=\"http:\/\/sickel.net\/blogg\/wp-content\/2021\/12\/Screenshot_2021-12-04-Stromforbruk-Grafana2-1024x291.png 1024w, http:\/\/sickel.net\/blogg\/wp-content\/2021\/12\/Screenshot_2021-12-04-Stromforbruk-Grafana2-300x85.png 300w, http:\/\/sickel.net\/blogg\/wp-content\/2021\/12\/Screenshot_2021-12-04-Stromforbruk-Grafana2-768x218.png 768w, http:\/\/sickel.net\/blogg\/wp-content\/2021\/12\/Screenshot_2021-12-04-Stromforbruk-Grafana2.png 1082w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Plutselig m\u00e5tte man holde \u00f8ye med str\u00f8mprisene og tenke litt p\u00e5 hva man gj\u00f8r n\u00e5r. Dersom man har en str\u00f8mleverand\u00f8r som tilbyr et API for str\u00f8mforbruk og str\u00f8mpriser, slik som tibber gir det en del muligheter. I tibbers api er &hellip; <a href=\"http:\/\/sickel.net\/blogg\/?p=1939\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1939","post","type-post","status-publish","format-standard","hentry","category-div"],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/pnVtD-vh","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"http:\/\/sickel.net\/blogg\/index.php?rest_route=\/wp\/v2\/posts\/1939","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/sickel.net\/blogg\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/sickel.net\/blogg\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/sickel.net\/blogg\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/sickel.net\/blogg\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1939"}],"version-history":[{"count":3,"href":"http:\/\/sickel.net\/blogg\/index.php?rest_route=\/wp\/v2\/posts\/1939\/revisions"}],"predecessor-version":[{"id":1945,"href":"http:\/\/sickel.net\/blogg\/index.php?rest_route=\/wp\/v2\/posts\/1939\/revisions\/1945"}],"wp:attachment":[{"href":"http:\/\/sickel.net\/blogg\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1939"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/sickel.net\/blogg\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1939"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/sickel.net\/blogg\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1939"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}