FH vs Tibber: Automatisering av klima og strøm

Som mange andre her har jeg lenge gledet meg og ventet, veldig tålmodig, på at ny FH hub skal støtte Tibber. Jeg har alltid hatt en mening av at det er stor oppside å la Tibber styre alt av varmekabler, panelovner og varmepumpe.

Men etter at støtten har latt vente på seg og at jeg har eksperimentert en del i høst så har jeg begynt å lure på om Tibber egentlig tilfører mere verdi enn det vi kan sette opp av automasjoner selv i FH.
Når jeg også har sett at Tibber har fyrt opp diverse enheter selv når strømprisen er høy, blir jeg skeptisk.

Ville derfor høre om andre her har gode tanker om hva de største oppsidene er med en Tibber integrasjon.

Med FH idag kan jeg:

  • Importere timesprisen fra Tibber
  • Importere varmepumpe(Sensibo) og panelovner (Mill/Adax)
  • Lage automasjoner for disse enhetene basert på prisene og/eller tidspunkt
4 Likes

Største fordelen for meg vil være å slippe å gjøre alt det selv :grimacing: Jeg liker futurehome fordi det er enkelt og ikke krever så mye trykking for at det skal fungere :stuck_out_tongue_winking_eye:

1 Like

Jeg gjorde noen forsøk for en stund tilbake med Tibber api. men klarte aldri å finne ennformel som funka bra.
Har endt opp med tidsstyringer så temperaturen er bra når jeg trenger og lavere når vi sover og er på jobb/skole.
Så har jeg en sparebluss (virtuell bryter) som senker temp mye og slår av vvb når jeg ser at prisen er kritisk

Hva var det du ikke fikk til som ønsket? :nerd_face:

Som du sier er jo tidsstyring relativt enkelt. Men en større logikk på pris viser seg å være litt komplisert å få til, ihvertfall for en som ikke koder til vanlig.

Hadde jeg dog fått inn noen flere pris verdier (spes % difference vs day) så hadde jeg kunne kjørt helt og holdent fra FH tror jeg.
Ser Homey har bedre støtte og der kjører veldig mange kun logikk i Homey.

Jeg hentet ut prisnivå og fikk: Normal, Dyr og Veldig Dyr.
Så forsøkte jeg å lage en automasjon som senket temperatur ved Dyrt nivå og senket enda mer samt slå av VVB ved Veldig dyr.
Fungerte fint i de periodene vi hadde Normalt nivå og topper av dyr/veldig dyr.
Men så var det perioder hvor det var dyrt nivå hele dagen omtrent, og da fungerte det dårlig.
Så da må det fler kriterier inn, og der stoppa det opp for min del

Korleis importerer du times prisen fra tibber?
Går dette av seg selv eller nå du inn kvar dag for og oppdatere?
Rimeleg fersk innen FH

Jeg har en flow for dette i Thingsplex.
Står noe om denne og en mulig forbedring her: Hente inn pris og prisdato fra tibber til en map of floats (eller Object)

Se koden jeg bruker nedenfor.

{
  "Id": "6CSKL7ssAXI3pOP",
  "ClassId": "hf1Ysemo50f5Fam",
  "Author": "",
  "Version": 0,
  "CreatedAt": "2021-08-23T22:02:03.755877004+02:00",
  "UpdatedAt": "2021-11-28T00:19:23.01432227+01:00",
  "Name": "Tibber: Hente prisinfo, hver time",
  "Group": "variables",
  "Description": "Kaller Tibber API og henter stømpris og prisnivå hver hele time.",
  "Nodes": [
    {
      "Id": "1",
      "Type": "time_trigger",
      "Label": "1min past each our",
      "SuccessTransition": "2",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "DefaultMsg": {
          "Value": "",
          "ValueType": ""
        },
        "Expressions": [
          {
            "Comment": "1 * * * *",
            "Comments": "",
            "Expression": "1 * * * *",
            "Name": ""
          }
        ],
        "GenerateAstroTimeEvents": false,
        "Latitude": 0,
        "Longitude": 0,
        "SunriseTimeOffset": 0,
        "SunsetTimeOffset": 0
      },
      "Ui": {
        "nodeType": "",
        "x": 43,
        "y": 226
      },
      "TypeAlias": "Time trigger"
    },
    {
      "Id": "2",
      "Type": "rest_action",
      "Label": "Get Energy Price Level from Tibber",
      "SuccessTransition": "25",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Auth": {
          "ClientID": "",
          "ClientSecret": "",
          "Enabled": false,
          "GrantType": "password",
          "Password": "",
          "Scope": "",
          "Url": "http://",
          "Username": ""
        },
        "Headers": [
          {
            "Name": "Content-type",
            "Value": "application/json"
          },
          {
            "Name": "Authorization",
            "Value": "TIBBER_TOKEN"
          }
        ],
        "LogResponse": true,
        "Method": "POST",
        "RequestPayloadType": "json",
        "RequestTemplate": "{ \"query\": \"{viewer {homes {currentSubscription {priceInfo {current {total energy tax startsAt level}}}}}}\" }\n",
        "ResponseMapping": [
          {
            "IsVariableGlobal": true,
            "Name": "Level",
            "Path": "$.data.viewer.homes[0].currentSubscription.priceInfo.current.level",
            "PathType": "json",
            "TargetVariableName": "energy_level",
            "TargetVariableType": "string",
            "UpdateTriggerMessage": false
          }
        ],
        "Url": "https://api.tibber.com/v1-beta/gql"
      },
      "Ui": {
        "nodeType": "",
        "x": 109,
        "y": 417
      },
      "TypeAlias": "HTTP msg"
    },
    {
      "Id": "25",
      "Type": "transform",
      "Label": "transform tibber",
      "SuccessTransition": "26",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Expression": "",
        "IsLVariableGlobal": true,
        "IsRVariableGlobal": false,
        "IsTargetVariableGlobal": false,
        "IsTargetVariableInMemory": true,
        "LVariableName": "energy_level",
        "RValue": {
          "Value": 0,
          "ValueType": "int"
        },
        "RVariableName": "",
        "Rtype": "var",
        "TargetVariableName": "energylevel_output",
        "TargetVariableType": "str_map",
        "Template": "    {\n      \"message_en\": \"Tibber pricelevel is now: {{ .Variable }}\",\n      \"message_no\": \"Tibber prisnivå er nå: {{ .Variable }}\",\n      \"sender\": \"flow\"\n    }",
        "TransformType": "template",
        "ValueMapping": [],
        "XPathMapping": []
      },
      "Ui": {
        "nodeType": "",
        "x": 214,
        "y": 599
      },
      "TypeAlias": "Transform"
    },
    {
      "Id": "26",
      "Type": "action",
      "Label": "Publish timeline",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "pt:j1/mt:cmd/rt:app/rn:time_owl/ad:1",
      "Service": "time_owl",
      "ServiceInterface": "cmd.timeline.set",
      "Config": {
        "DefaultValue": {
          "Value": {
            "message_en": "--",
            "message_no": "--",
            "sender": "flow"
          },
          "ValueType": "str_map"
        },
        "IsVariableGlobal": false,
        "Props": {},
        "RegisterAsVirtualService": false,
        "VariableName": "energylevel_output",
        "VariableType": "str_map",
        "VirtualServiceGroup": "",
        "VirtualServiceProps": {}
      },
      "Ui": {
        "nodeType": "timeline_action",
        "x": 305,
        "y": 812
      },
      "TypeAlias": "Timeline"
    },
    {
      "Id": "27",
      "Type": "time_trigger",
      "Label": "2min past each our",
      "SuccessTransition": "28",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "DefaultMsg": {
          "Value": "",
          "ValueType": ""
        },
        "Expressions": [
          {
            "Comment": "2 * * * *",
            "Comments": "",
            "Expression": "4 * * * *",
            "Name": ""
          }
        ],
        "GenerateAstroTimeEvents": false,
        "Latitude": 0,
        "Longitude": 0,
        "SunriseTimeOffset": 0,
        "SunsetTimeOffset": 0
      },
      "Ui": {
        "nodeType": "",
        "x": 375,
        "y": 239
      },
      "TypeAlias": "Time trigger"
    },
    {
      "Id": "28",
      "Type": "rest_action",
      "Label": "Get Energy Price from Tibber",
      "SuccessTransition": "31",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Auth": {
          "ClientID": "",
          "ClientSecret": "",
          "Enabled": false,
          "GrantType": "password",
          "Password": "",
          "Scope": "",
          "Url": "http://",
          "Username": ""
        },
        "Headers": [
          {
            "Name": "Content-type",
            "Value": "application/json"
          },
          {
            "Name": "Authorization",
            "Value": "TIBBER_TOKEN"
          }
        ],
        "LogResponse": true,
        "Method": "POST",
        "RequestPayloadType": "json",
        "RequestTemplate": "{ \"query\": \"{viewer {homes {currentSubscription {priceInfo {current {total energy tax startsAt level}}}}}}\" }\n",
        "ResponseMapping": [
          {
            "IsVariableGlobal": true,
            "Name": "price_level",
            "Path": "$.data.viewer.homes[0].currentSubscription.priceInfo.current.total",
            "PathType": "json",
            "TargetVariableName": "price_level",
            "TargetVariableType": "float"
          }
        ],
        "Url": "https://api.tibber.com/v1-beta/gql"
      },
      "Ui": {
        "nodeType": "",
        "x": 417,
        "y": 427
      },
      "TypeAlias": "HTTP msg"
    },
    {
      "Id": "30",
      "Type": "action",
      "Label": "Publish timeline",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "pt:j1/mt:cmd/rt:app/rn:time_owl/ad:1",
      "Service": "time_owl",
      "ServiceInterface": "cmd.timeline.set",
      "Config": {
        "DefaultValue": {
          "Value": {
            "message_en": "--",
            "message_no": "--",
            "sender": "flow"
          },
          "ValueType": "str_map"
        },
        "IsVariableGlobal": false,
        "Props": {},
        "RegisterAsVirtualService": false,
        "VariableName": "energyprice_output",
        "VariableType": "string",
        "VirtualServiceGroup": "",
        "VirtualServiceProps": {}
      },
      "Ui": {
        "nodeType": "timeline_action",
        "x": 584,
        "y": 815
      },
      "TypeAlias": "Timeline"
    },
    {
      "Id": "31",
      "Type": "transform",
      "Label": "transform tibber price",
      "SuccessTransition": "30",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Expression": "",
        "IsLVariableGlobal": true,
        "IsRVariableGlobal": false,
        "IsTargetVariableGlobal": false,
        "IsTargetVariableInMemory": true,
        "LVariableName": "price_level",
        "RValue": {
          "Value": 0,
          "ValueType": "int"
        },
        "RVariableName": "",
        "Rtype": "var",
        "TargetVariableName": "energyprice_output",
        "TargetVariableType": "str_map",
        "Template": "    {\n      \"message_en\": \"Tibber price is now: {{ .Variable }} NOK\",\n      \"message_no\": \"Tibber pris er nå: {{ .Variable }} NOK\",\n      \"sender\": \"flow\"\n    }",
        "TransformType": "template",
        "ValueMapping": [],
        "XPathMapping": []
      },
      "Ui": {
        "nodeType": "",
        "x": 486,
        "y": 601
      },
      "TypeAlias": "Transform"
    },
    {
      "Id": "34",
      "Type": "transform",
      "Label": "Write price request to Influx",
      "SuccessTransition": "35",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Expression": "",
        "IsLVariableGlobal": true,
        "IsRVariableGlobal": false,
        "IsTargetVariableGlobal": false,
        "IsTargetVariableInMemory": true,
        "LVariableName": "price_level",
        "RValue": {
          "Value": 0,
          "ValueType": "int"
        },
        "RVariableName": "",
        "Rtype": "var",
        "TargetVariableName": "price_request_output",
        "TargetVariableType": "object",
        "Template": "{\n    \"proc_id\": 2,\n    \"bucket\": \"gen_default\",\n    \"dp\": [\n      {\n        \"name\": \"current_price\",\n        \"tags\": {},\n        \"fields\": {\n          \"val\": {{ .Variable }}\n        }\n      }\n    ]\n}",
        "TransformType": "template",
        "ValueMapping": [],
        "XPathMapping": []
      },
      "Ui": {
        "nodeType": "",
        "x": 758,
        "y": 511
      },
      "TypeAlias": "Transform"
    },
    {
      "Id": "35",
      "Type": "action",
      "Label": "Write price to Influx",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "pt:j1/mt:cmd/rt:app/rn:ecollector/ad:1",
      "Service": "ecollector",
      "ServiceInterface": "cmd.tsdb.write_data_points",
      "Config": {
        "DefaultValue": {
          "Value": "",
          "ValueType": "object"
        },
        "IsVariableGlobal": false,
        "Props": {},
        "RegisterAsVirtualService": false,
        "ResponseToTopic": "",
        "VariableName": "price_request_output",
        "VariableType": "object",
        "VirtualServiceGroup": "",
        "VirtualServiceProps": {}
      },
      "Ui": {
        "nodeType": "",
        "x": 837,
        "y": 820
      },
      "TypeAlias": "Action"
    },
    {
      "Id": "36",
      "Type": "time_trigger",
      "Label": "Every 3 min past hour",
      "SuccessTransition": "34",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "DefaultMsg": {
          "Value": "",
          "ValueType": ""
        },
        "Expressions": [
          {
            "Comments": "",
            "Expression": "3 * * * *",
            "Name": ""
          }
        ],
        "GenerateAstroTimeEvents": false,
        "Latitude": 0,
        "Longitude": 0,
        "SunriseTimeOffset": 0,
        "SunsetTimeOffset": 0
      },
      "Ui": {
        "nodeType": "",
        "x": 660,
        "y": 237
      },
      "TypeAlias": "Time trigger"
    }
  ],
  "Settings": null,
  "IsDisabled": false,
  "IsDefault": false,
  "ParallelExecution": "parallel"
}
1 Like

Ok.
Rimelig langt script :joy:
Er langt fra der sjøl :joy:
Kan dette legges inn uten å påvirke automasjon som ein allerede har satt opp?
Vil nesten anta att du driver med koding?

Hvis ein legger inn denne så kan ein bruke dette i automasjonen?

Dette inneholder jo mer enn kun pris, henter også prisnivå og setter en global verdi osv.
Skal du kun ha pris så kan du fjerne en del :slight_smile:

Det skal komme noe mere ferdig fra FH tror jeg, men per idag er dette det beste slik jeg har forstått.

  • Du kan bruke det helt uten å påvirke annet ja, det vil kjøre isolert sett med mindre du kobler det sammen med andre flows.
  • Jeg har en interesse for koding ja, men det meste av dette i TP Flow foregår jo i et grenesnitt. Så det bør. være mulig å få til mye selv uten kodekunnskap :slight_smile:

Jeg sliter fortsatt litt med å finne de beste punktene fra Tibber og automatisere på, både ren pris og prisnivå har sine nedsider.
Pusler litt med å få inn “denne timens %-diff mot dagens gjennomsnitt”. Lurer på om det blir det beste å bruke for å skru av strømmen/senke temp i timer med høy strømpris.

Ser eg har litt og lese meg opp på :grin: takk for info​:+1: håper FH kommer opp med noe grensesnitt. Så ein kan hente fra tibber uten lange script :+1:

1 Like

Jeg gikk på en liten smell og kjøpte Futurehome og Heatit-tersmostater etter jeg ble kunde hos Tibber. Burde lest bedre, for der er jo intergrasjonen null med mindre man sitter med gammelt utstyr. Det vet jo dere like godt som meg :stuck_out_tongue:

Uansett, siste svar fra Tibber kom idag:
Vi har nå en oppdatering rundt utvikling av Futurehome x integrasjonen.

Først og fremst vil vi beklage for at denne ikke er ferdig enda. Vi har siden lansering mai 2020 ønsket å få til en integrasjon mot den nye Futurehome X plattformen, men dessverre har vi møtt på noen utfordringer på veien. Da API`et til Futurehome først var klart viste det seg i ettertid at de trengte å gjøre endringer og investeringer i en helt ny arkitektur. Dette medførte også endringer i hva som skulle til fra vår side for å få på plass integrasjonen.

For å kunne klare å integrere Futurehome x vil det kreves en ombygging av all integrasjon som vi tidligere har hatt mot Futurehome og endringer av strukturene vi har hatt tidligere. Vi ønsker fortsatt å få til en integrasjon med Futurehome og vil jobbe tett med de for å få dette til. De har oversendt det vi trenger for å utvikle denne integrasjonen, men funksjonene deres har så langt ikke blitt fullt ut testet av noen part.

Vi har ved tre tidligere tilfeller satt av tid til å gjøre integrasjonen (da viste det seg å ikke fungere på deres side), og nå har vi andre ting som ligger foran i køen før vi går løs på jobben. Dette er et omfattende arbeid og per i dag kan vi derfor ikke si noe om denne vil være klar i nærmeste fremtid.

Jeg er litt der at jeg tenker jeg avslutter Tibber inntil videre, spesielt hvis noen her klarer å lage varmestyring basert på strømpriser. Ellers gir jo ikke Tibber-kostnaden noe merverdi.
Så jeg leser øynene røde og tørre på forumet her for å lære dette greiene.

Takk!
Smud kode, gikk rett inn når jeg hentet token!

1 Like

Hva gjør vi andre som ikke helt vet hva vi skal gjøre med slik kode, tokens osv?
Det er jo tydeligvis ressurser her i brukerforumet som lager de løsningene som er mest etterspurt, men jeg aner jo ikke hvordan jeg skal ta de i bruk… :wink:

Nå begynner det endelig å skje noe :clap::

1 Like