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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gjest
Skriv svar til emnet...

×   Du har limt inn tekst med formatering.   Fjern formatering

  Du kan kun bruke opp til 75 smilefjes.

×   Lenken din har blitt bygget inn på siden automatisk.   Vis som en ordinær lenke i stedet

×   Tidligere tekst har blitt gjenopprettet.   Tøm tekstverktøy

×   Du kan ikke lime inn bilder direkte. Last opp eller legg inn bilder fra URL.


  • Lignende innhold

    • Av norsemanGrey
      Heisann,
       
      Jeg skal gå til innkjøp av noen nye varmeovner til sammenhengende stue/gang og ønsker noe med intelligent styring. Jeg tenkte i første omgang må Mill e.l., men som jeg forstår det blir de kun regulert med lokal temperatur-sensor på ovnen noe som ikke er optimat. Jeg ønsker at ovnene skal kunne regulere basert på en eller flere ekstern temperatur sensorer plasser mer midt i rommene.
       
      Har drevet og lekt med litt med Raspberry PI i det siste og lurte på muligheten for å gjøre dette gjennom Home Assistant, men vet ikke nok om hva som som er tilgjengelig/mulig å få til. Finnes det noen liknende prosjekter man kan se til. Er det noen anbefalinger i forhold til ovner, temperatur-sensorer, software for å få til dette?
       
      Takker for input
       
      Edit: Jeg har forresten Verisure røykvarslere med temperatur- og fuktighetssensor i dag så det er kanskje en mulighet å bruke måling fra disse? Samplings-intervallet for disse i Verisure-appen er jo veldig lang så det egner seg kanskje dårlig?
    • Av Panneband
      Hei 😄
       
      Er det noen her som benytter Homey og Tibber sammen?
      Tenker da på styring av termostat eller varmtvannsbereder. Er litt usikker på hvordan jeg skal gjøre dette med tanke på Flows og hvilke triggere dere bruker for å løse dette.
      Noen som har eksempler? 
       
       
       
       
    • 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? 
       
       
×
×
  • Opprett ny...