Hei, jeg har brukt APIet (takk!) til å lage et AppDaemon-script som henter inn data og lager en sensor av det i Home Assistant. Sikkert mye teit kode, men:
i apps.yaml:
spotpris:
module: spotpris
class: Spotpris
sensor: "sensor.spotpris_nok"
zone: "NO3"
timezone: "Europe/Oslo"
multiplier: 1.25
adder: 0.01
sensor_attributes:
state_class: measurement
device_class: monetary
unit_of_measurement: "NOK/kWh"
spotpris.py:
import requests
from datetime import datetime
from datetime import timedelta
import zoneinfo
import hassapi as hass
"""
Fetch spot price data and expose as a sensor
Uses funny0frank's REST API from ~https://www.hjemmeautomasjon.no/forums/topic/6096-gratis-%C3%A5pent-api-for-%C3%A5-f%C3%A5-times-str%C3%B8mpris-for-de-forskjellige-sonene-i-norge/
Agruments:
- zone: string Which electricity zone to fetch price from
- multiplier: float To apply sales tex etc., value is multiplied with this
- adder: float Added to value after multiplication, i.e. "påslag"
- tz: string Timezone e.g. "Europe/Oslo"
- sensor: string Name of generated sensor
- sensor_attributes: dict Attributes of generated sensor, e.g.
state_class: measurement
device_class: monetary
unit_of_measurement: "NOK/kWh"
"""
class Spotpris(hass.Hass):
def initialize(self):
self.zone = self.args["zone"]
self.multiplier = self.args["multiplier"]
self.adder = self.args["adder"]
self.tz = zoneinfo.ZoneInfo(self.args["timezone"])
self.sensor = self.args["sensor"]
self.attributes=self.args["sensor_attributes"]
self.price_info = {}
self.price_info_date = ''
now = datetime.now(self.tz) + timedelta(seconds=5)
self.run_every(self.updateState, now, 60)
def updateState(self, foo, kwargs=None):
today = datetime.now(self.tz).date().isoformat()
if (not self.price_info_date == today):
self.fetch_price_info(today)
now = datetime.now(self.tz).strftime("%G-%m-%dT%H:00:00+01:00")
price = self.price_info[now]["NOK_per_kWh"]*self.multiplier+self.adder
self.set_state(self.sensor, state=price, attributes=self.attributes)
def fetch_price_info(self, today):
response = requests.get(f"https://norway-power.ffail.win/?zone={self.zone}&date={today}")
self.price_info = response.json()
self.log(f"fetched new price info: {self.price_info}", level="INFO")
self.price_info_date = today
Det tilfredsstiller "bare hent en gang i døgnet" siden den gjør on-demand oppslag, det minuttet det begynner på en ny dag slår den opp, og da er det vel garantert at de datane finnes også. Det er veldig utestet, jeg hacket det sammen på et par timer her nettopp, men ser ut til å kanskje funke? Jeg har f.eks. ikke kjørt den i et døgn for å se at den faktisk bytter dato ennå... Den genererte sensoren kan så brukes som kilde for home assistant sin "Bruk ei oppføring med gjeldande pris" i Konfigurasjon -> Energi -> Straumnett i home assistant for å gi utregning av effektiv kostnad.
Vet ikke helt rett måte å beregne kostnad på, her har jeg jo bare tatt * 1.25 (for moms) og lagt på 1 øre (påslag).
Tror jeg bare kan anbefale denne metoden for folk som allerede har satt opp AppDaemon... Det tok meg mye lengre tid enn å lage det over.
@AMelbye, der ser du forresten hvordan man henter inn dataene i python. (=