Gå til innhold
  • Bli medlem
vegardbr

Varmestyring ut fra strømpris hos Tibber i Fibaro HC2

Anbefalte innlegg

Guide til hvordan du benytter Tibber mot Fibaro HC2 for å styre varme-panelet:

 

 

Nr.1: Hente inn strømpris fra Tibber: Referanse:  https://marketplace.fibaro.com/items/tibber-price

Lag en ny variabel i "Panels->Variables panel->Variables" som heter "Strompris" og la denne stå som null.

Lag en LUA scene som heter "Hent_strompris" og sett inn kode. Her er det viktig å legge inn din Tibber ID på "XXXXXX"

Du kan nå teste ut om du greier å hente verdien fra Tibber ved å kjøre scenen manuelt. Dette gjøre du ved å trykke på boksen under koden etter å ha lagret scenen (floppy-ikon på høyre side).

--[[
%% properties
%% events
%% globals
--]]

if (fibaro:countScenes() > 1) then   --Bare én kjøring av gangen.
  fibaro:abort()
end

fibaro:debug(fibaro:getGlobalValue('Strompris'));

local http = net.HTTPClient();

local payload = '{"query": "{viewer {homes {currentSubscription {priceInfo {current {total currency}}}}}}", "variables": null, "operationName": null}';

 

http : request('https://api.tibber.com/v1-beta/gql',  {

    options = {

        method = "POST",

        headers = {

            ['Authorization'] = 'Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', --Din Tibber ID her.

            ['Content-Type'] = 'application/json'

        

      },

      data = payload

    },

    success = function(response) 

      fibaro:debug (response.data)      

      local startIndex = string.find(response.data,'{"total":') + 9;

      local endIndex = string.find(response.data,',')-1;

      local price = string.sub(response.data,startIndex, endIndex);    

      startIndex = string.find(response.data,'currency":"') + 11;

      endIndex = string.find(response.data,'}')-2;

      local currency = string.sub(response.data,startIndex, endIndex);

      fibaro:debug(price)
	  fibaro:setGlobal('Strompris',price);
      fibaro:debug(currency)

      
    end,

         error = function(err) fibaro:debug ("Error:" .. err)

    end

});

--fibaro:startScene(6) -- Denne er kommentert ut intill videre

Nr.2. Du greier nå å hente inn Strømpris, men dette gjøres ikke automagisk. Du trenger derfor en form for "timer". Jeg har funnet at den enkleste og best fungerende timeren kan lages i blokkdiagramer, selv om jeg ikke er noe fan av denne typen programmering.  Du lager altså en ny scene som du kaller noe slikt som "TimerStrompris". Denne skal se slik ut:

blokk_diagram.jpg.3cf7083cd0272091eec951ece769ce6f.jpg

 

Nr.3. Nå hentes strømprisen hver time. Dette ser ut til fungere meget bra for min del. Det neste vi skal gjøre er å sette opp en enhet som viser oss hva strømprisen er.

Gå derfor til "Devices" -> "To add the Virtual Device" -> "Add"

Gi denne navn "Strompris" og gå til den avanserte menyen. 

Under "Choose set of buttons" hak av "Label" og trykk deretter på "Add set"

"Label" = "Kroner pr kW"

"ID" = "Label1"

huk av "main"

Legg inn denne koden i "Main loop":

local ID = fibaro:getSelfId(Label1)
fibaro:call(ID, "setProperty", "ui.Label1.value", (tonumber(fibaro:getGlobalValue("Strompris"))))
fibaro:sleep(120000) --henter oppdatering hvert andre minutt

image.thumb.png.3e25c0ffb9eb45de38d8bd41f278c440.png

Du vil nå ha en virtuell enhet som forteller deg hva strømprisen er.

 

Nr.4. Det neste vi skal gjøre er å lage en scene som sjekker hvordan strømprisen oppfører seg og styrer vannbåren varme i huset. Jeg har brukt Heating panel og reléer til å styre mitt system. Jeg har også en styrt ventil på varmekolben som lar varmvannet gå tilbake til varmepumpen om for mange ventiler er lukket.

Vi må her opprette en tidsvariabel som global variabel akkurat slik vi gjorde med den globale variablen "Strompris". Denne gangen kaller variablen "iPris".

Lag også en variabel som heter "DyrStrom"

Vi lager også en Predefinert variabel som vi kaller "PrisTabell". Ironisk nok skal du IKKE definere denne. Definisjonen lager du i scenen din.

 

 

Nr.5. Lag en ny LUA scene. Kall den "StromPrisSnitt". 

linje 14-18 beskriver en tabell som skal fungere som en initialisering av "PrisTabell". Fjern derfor kommenteringen og kjør scenen en gang. Deretter kan du fjerne eller kommentere ut dette avsnittet.

--[[
%% properties
%% events
%% globals
--]]


if (fibaro:countScenes() > 1) then
  fibaro:abort()
end

-- #Inital setup of the "predefined global variable" : Pristabell 

--Table = {
--        [1]=881,[2]=881,[3]=881, [4]=881,[5]=881,[6]=881, [7]=881,[8]=881,[9]=881,[10]=881        
--  }
--local jTable = json.encode(Table)
--fibaro:setGlobal("PrisTabell", jTable)


-- #Get Strømpris, a global variable:

local pris = fibaro:getGlobalValue('Strompris')

-- #Get and Decode Pristabell:
local jT = json.decode(fibaro:getGlobalValue("PrisTabell")) 

-- #Read Pristabell for decode purpose:
for k,v in pairs(jT) do print("k: " ..k..", v: "..v) end

-- #Get location in the table from the global variable iPris:
local i= fibaro:getGlobalValue('iPris')

-- #make some local variables:
local snitt = 0
local m = 0

-- #find the average price the last ten hours:
while m<10 do
m = m+1
  snitt = snitt+jT[m]
end
fibaro:debug(snitt);
snitt=snitt/10
fibaro:debug(snitt);
-- #What is the increase in price compaired to the last ten hours:
local okning = pris/snitt

fibaro:debug(okning);





--fibaro:debug(jT[i]);
-- #Where in the table should the next price be stored:
i = i+1

if (i > 10) 
   then i=1
end

fibaro:setGlobal('iPris', i)
-- #Place the current price in the table:
jT[i] = pris


-- #is the power +10% more expencive than the 10 hour avrage? Then change a global variable called DyrStrom:
if okning >1.1 then
  fibaro:setGlobal("DyrStrom", 1)
  fibaro:debug("Dyr Strom!");
  else
  fibaro:setGlobal("DyrStrom", 0)
  fibaro:debug("OK!");
end

-- #Save the current price in the historic price table:
local jTable = json.encode(jT)
fibaro:setGlobal("PrisTabell", jTable)

 

Nr.6. Pristabellen lastes ikke inn av seg selv. Hver gang du henter en strømpris vil du legge denne inn i tabellen.   

I bunnen av scenen "Hent_strompris" finner du en kommentert snutt : "--fibaro:startScene(6)". Her skal du nå legge inn ID fra scenen "StromPrisSnitt".

På den måten går timeren av hver time, som så starter Hent_Strompris som så legger dette inn i tabellen.

Legg merke til at "iPris" gir plassering i tabellen.

"DyrStrom" sier binært om strømprisen er høy i forhold til de siste 10 timer.

ID.PNG.d27e98b4e1dc3349b85716365d0e4b02.PNG

 

 

Nr.7. Det vi nå har å jobbe med er variablen "DyrStrom".

Denne variablen sier fra når vi vil bruke mindre strøm.

Først må vi finne ID fra "heating Panel". For å finne ID må du være på samme nett som Fibaro HC2en din. Du legger da inn denne lenken i nettleseren:"Din_Fibaro_ID"/api/panels/heating

Din_Fibaro_ID er synlig når du er logget inn på Fibaro-boksen i nettleseren din på ditt lokale nettverk. Egentlig kan du bare bytte ut det som står foran ID'en i nettadressen.

 

Denne scenen hentes ved en forandring i variablen "DyrStrom".

Her brukes "DyrStrom" variablen til å styre varmen over på manuell modus. Dette gjør at alle varmeventiler går til lukket tilstand, noe som betyr at varmepumpen bruker avslutter oppvarmingen av huset for minst én time. Neste time vil dette sjekkes igjen og om strømprisen ikke er 10% dyrere enn de 10 foregående timene vil "DyrStrom" gå til null og den manuelle modusen skrus på i 0 sekunder. 

--[[
%% properties
%% events
%% globals
DyrStrom
--]]
-- above: start the scene when the global variable DyrStrom changes.

--Run only one at a time:
if (fibaro:countScenes() > 1) then
  fibaro:abort()
end



-- These values can be found by inserting this link with your HC2 ip-address in your browser "your_hc2_ip"/api/panels/heating

--My heating panel IDs
--  "id":25,"name":"Vaskerom"
--  "id":68,"name":"Kjeller"
--  "id":71,"name":"Kontor"
--  "id":119,"name":"Temperature in Gang"
--  "id":120,"name":"Temperature in Stue"
--  "id":121,"name":"Bad 2.etg"

local i = fibaro:getGlobal('DyrStrom')

fibaro:debug(i);
local IdPanel  = 25  -- id from the heating Panel 

----------------------------------------------------------------------------------
-- Manual mode in the heating panel with temp 18°C for 2 hour

----------------------------------------------------------------------------------
local panel = api.get("/panels/heating/" .. IdPanel)
    panel.properties.handTemperature = 18
    panel.properties.handTimestamp = os.time() + (60*60*2*i)
    api.put("/panels/heating/"..IdPanel, panel)




local IdPanel  = 68  -- id from the heating Panel 

----------------------------------------------------------------------------------
-- Manual mode in the heating panel with temp 10°C for 2 hour

----------------------------------------------------------------------------------
local panel = api.get("/panels/heating/" .. IdPanel)
    panel.properties.handTemperature = 10
    panel.properties.handTimestamp = os.time() + (60*60*2*i)
    api.put("/panels/heating/"..IdPanel, panel)


local IdPanel  = 71  -- id from the heating Panel 

----------------------------------------------------------------------------------
-- Manual mode in the heating panel with temp 18°C for 2 hour

----------------------------------------------------------------------------------
local panel = api.get("/panels/heating/" .. IdPanel)
    panel.properties.handTemperature = 18
    panel.properties.handTimestamp = os.time() + (60*60*2*i)
    api.put("/panels/heating/"..IdPanel, panel)


local IdPanel  = 119  -- id from the heating Panel 

----------------------------------------------------------------------------------
-- Manual mode in the heating panel with temp 18°C for 2 hour

----------------------------------------------------------------------------------
local panel = api.get("/panels/heating/" .. IdPanel)
    panel.properties.handTemperature = 18
    panel.properties.handTimestamp = os.time() + (60*60*2*i)
    api.put("/panels/heating/"..IdPanel, panel)

local IdPanel  = 120  -- id from the heating Panel 

----------------------------------------------------------------------------------
-- Manual mode in the heating panel with temp 18°C for 2 hour

----------------------------------------------------------------------------------
local panel = api.get("/panels/heating/" .. IdPanel)
    panel.properties.handTemperature = 18
    panel.properties.handTimestamp = os.time() + (60*60*2*i)
    api.put("/panels/heating/"..IdPanel, panel)


local IdPanel  = 121  -- id from the heating Panel 

----------------------------------------------------------------------------------
-- Manual mode in the heating panel with temp 18°C for 2 hour

----------------------------------------------------------------------------------
local panel = api.get("/panels/heating/" .. IdPanel)
    panel.properties.handTemperature = 18
    panel.properties.handTimestamp = os.time() + (60*60*2*i)
    api.put("/panels/heating/"..IdPanel, panel)

 

Kom gjerne med inspill og spørsmål til løsningen.

  • Like 2

Del dette innlegget


Lenke til innlegg
Del på andre sider

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå

  • Lignende innhold

    • Av Johan
      Har kjøpt hus på rot i Asker som skal bli ferdig til høsten (2019 håper jeg !!) 
      I kontrakten inngår hovedinnstallasjoner frem til kontakter. Helt basic.
      Har en skisse fra Elektriker, men har tilvalgsmuligheter.
       
      Søker erfaren planlegger og installatør for hjemme automasjon.
      Har TIBBER leveranse nå og vil flytte over denne til det nye huset.
    • Av Martin Bjørkmo
      Hei. Noen her som har erfaring med remotec på eldre panasonic varmepumpe? Har prøvd alle ir kodene, men får ikke kontakt. Er det noe mer en bare ir koden som må programmeres?🤔
    • Av flam1
      Heisann. 
      Kom innom denne nettsiden da jeg søkte opp "Tibber erfaringer". Leste meg igjennom en lang tråd, men sliter fortsatt litt. For det første, ser jeg at de fleste har "Homeseer" eller "Home Assistant", og dette skjønte jeg meg ikke helt på selv om jeg googlet litt. 
      Hvordan leser/kommuniserer Tibber med de smart-enhetene jeg allerede har? Søker den opp via WiFi, eller må jeg ha noe mer fancy som de nevnte systemene ovenfor? Og er Tibber et solid valg uansett om leiligheten er så "smart" eller ikke? 
       
       
    • Av Moskus
      Du har et smart hus med HomeSeer som hjerne. Du kan få Tibber til å kjøpe strøm for deg til spotpris (for 39 kr i måneden).
      Hvis du kombinerer HomeSeer og Tibber får du et enda smartere hus, mulighet til å spare noen kroner på strømregningen, samt mulighet til å gjøre noe godt for planeten. Det er en vinn-vinn-vinn situasjon, det!  
       
      Er du ikke Tibber-kunde kan du bli det her, så får vi begge 500 kr til gadgets.  
       
      TibberSeer henter data fra Tibber. Forbruksdata, og dagens og morgendagens strømpriser blir tilgjengelige. I tillegg litt enkel statistikk.
      HomeSeer sin eventmotor er blant de kraftigste innen hjemmeautomasjon, og med informasjon med Tibber blir den enda kraftigere
       
      Dette er imidlertid en beta-versjon av plugien, så forvent litt bugs. I tillegg vil jeg vite om dine behov. Ønsker og kommentarer er velkomne!  
       
      Priser
      TibberSeer henter priser fra Tibber og lager litt enkel statistikk.

       
      "High" og "Low" er gjennomsnittspris hhv. lagt til og trukket fra et standardavvik. Mellom High og Low vil dermed statistisk sett 84% av all tid være. Dermed overskrides f.eks. "High" i 8% av tilfellene; dvs. 3 timer i døgnet hvis prisene er noenlunde normalfordelte. Det er de nødvendigvis ikke, men statistikken kan likevel brukes for å unngå de verste timene i døgnet.
       
      Fargene er foreløpig som følger:
      - Hvit under 20 øre
      - Blått fra 20 øre til 40 øre
      - Grønt fra 40 øre til 60 øre
      - Gult fra 60 øre til 80 øre
      - Rødt over 80 øre
       
      Forbruk
      Her vises oppsummeringer over forbruk, i år, måneder, uker og dager. Timedata hvis du har det. Det er imidlertid store begrensinger for datatilgjengelighet, selv for oss som har AMS-målere. Men håpet er at dette blir bedre i løpet av året (og det er ikke Tibber sin feil, men leverandørene).

       
       
      Realtime forbruk (for dem med Tibber Pulse)
      Tibber Pusle kan kobles til HAN-porten, og vil sende realtime (oppdatering hvert ca. 2,5 sekund) forbruksdata til Tibber og deretter til HomeSeer. Hvilke data som skal vises kan du endre i plugin-innstillingene.

       

       
      Grafer
      Hvis du kjører HomeSeer på Windows kan du få TibberSeer til å lage grafer. Utmerket til HStouch.  
      Planen er selvfølgelig å få dette tilgjengelig for Linux-brukere også.
       
      Under vises eksempeldata (ikke mine data).



       
       
      Lager også en graf over dagens strømpriser, med "High", "Low" og gjennomsnitt tegnet inn. 
       

       
       
      Events
      For å gjøre et smart hus smartere må man ha mulighet for å programmere "Events". HomeSeer kan dermed sjekke om prisen er høyere eller lavere utvalgte verdier (High, Average, Low eller en verdi du spesifiserer selv, "custom").
       
      TibberSeer legger til egne triggere, som vist under:

       
      I tillegg kan du bruke prisdataene som betingelser i 

       
      Dermed blir det lett å spare strøm i de periodene med høyest strømpris.
      La oss skru av varmtvannsberederen når prisen er høyest:

       
      Men siden vi faktisk trenger varmt vann og vil unngå legionella, må vi jo sette den på igjen:

       
       
      Men vi kan jo også bruke strøm når den er lav:

       
       
      Eller hva med et hint at det kan koste ekstra penger?

       
       
      Installasjon
      Last ned ZIP-filen og pakk den ut i HS-mappen.
      Gå til Plugins -> Manage. Aktiver TibberSeer.
       
      Gå til Plugins -> TibberSeer -> Configuration.
      Legg inn din egen Tibber token i tekstboksen "Token". Viktig!
       
      Priser
      Gå til Plugins -> TibberSeer -> Configuration.
      Trykk på "Configure price grabbing".
      Trykk på "Done!" nederst på siden. <- Viktig!
       
      Forbruk
      Gå til Plugins -> TibberSeer -> Configuration.
      Trykk på "Configure consumption grabbing".
      <Trykk på "Done!" nederst på siden. <- Viktig!
       
       
      Kjente begrensninger
      -Kan ikke lage grafer på Linux. Enda.
      -Statistikken er ikke testet over lang tid. Trenger tilbakemeldinger her!
       
      Merk at dette er en BETA-VERSJON! Jeg tar selvfølgelig ikke ansvar for din HS-installasjon, deg, ditt hus, kona eller hunden din (eller noe som helst annet) hvis du installerer plugin'en. Jeg tror imidlertid ikke så mye kan skje... Jeg kjører den selv på min egen hoved-HS-installasjon, hvis du føler deg betrygget av det.  
       
      Tilbakemelding ønskes her: https://www.hjemmeautomasjon.no/forums/topic/2749-tibber-plugin-hva-ønsker-du-deg/
       
       
    • Av Danonym1
      Med Tibber pulse nylig i hus hadde det vært svært ønskelig med en native binding til OpenHAB.
      OpenHAB har et bounty system for bindinger, er dette noe flere ville vært intressert i å bidra til, enten med penger eller enda bedre med utvikling av binding. Jeg selv har begrenset kunnskap på programmering av denne typen og ville nødvendigvis helst kunne bidra med penger og testing.

      Se også denne liken: https://community.openhab.org/t/tibber-binding/67019

      PS. Ja jeg har sett den ene posten i dette forumet på hvordan det kan løses, men ønsker en dedikert binding.
×