Gå til innhold
  • Bli medlem
Støtt hjemmeautomasjon.no!

Tibber API - PHP


Anbefalte innlegg

Siden PHP er et språk jeg kan, tenkte jeg å bare lage en enkel sak som kjøres jevnlig og oppdaterer en device i HomeSeer via JSON-interface.

Har tatt utgangspunkt i dette: https://developer.tibber.com/docs/guides/calling-api

Og har da dette PHP-scriptet:

<?php

$json = json_encode(array('query' => '{viewer {homes {currentSubscription {priceInfo {current {total energy tax startsAt }}}}}}'));

# Create a connection
$ch = curl_init();
# Setting our options
curl_setopt($ch, CURLOPT_URL, 'https://api.tibber.com/v1-beta/gql');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, 
   array('Content-Type: application/json',  
   'Authorization: Bearer d1007ead2dc84a2b82f0de19451c5fb22112f7ae11d19bf2bedb224a003ff74a')); 
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_VERBOSE, true);

# Get the response
$response = curl_exec($ch);
var_dump(curl_error($ch));
var_dump($resonse);
echo '<pre>';
var_dump(curl_getinfo($ch));
echo $json;
curl_close($ch);

?>

Denne returnerer bare NULL og curl_error er bare en tom streng.

curl_getinfo sier blant annet:

  ["http_code"]=>
  int(200)

 

Noen som ser hva som kan være galt?

Lenke til kommentar
Del på andre sider

9 minutes ago, ZoRaC said:

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Authorization: Bearer d1007ead2dc84a2b82f0de19451c5fb22112f7ae11d19bf2bedb224a003ff74a'));

Her må du skaffe ditt eget token(etter Bearer).

Ikke poste det inn her siden enhver da kan gjøre requests som deg.

 

Ref

A Personal Access Token give you access to your data and your data only. This is ideal for DIY people that want to leverage the Tibber platform to extend the smartness of their home. Such a token can be acquired here

 

Lenke til kommentar
Del på andre sider

Jeg så at det var tibber sitt token og har en liten mistanke om at det ikke er aktivt. Det er vel bare å skaffe seg sitt eget eller ta kontakt med de over chat.

 

200 er muligens en http 200 som er en ok tilbake fra din request. Mulig de gir deg 200 uansett hva som skjer..

Lenke til kommentar
Del på andre sider

Tibber kan du skrive til og fra med å kun lese JSON, er veldig enkelt. :)

 

 

Men de skal komme med en helt egen .NET integrasjon. Venter med plugin til den er ferdig, det vil nok gjøre det VELDIG mye enklere. 

Visual Studio FTW! ?

Lenke til kommentar
Del på andre sider

Mulig det er at du spesifiserer post to ganger. 

 

CURLOPT_POST

A parameter set to 1 tells libcurl to do a regular HTTP post. This will also make the library use a "Content-Type: application/x-www-form-urlencoded" header.

 

Mulig det at du setter den gjør at din postinfo blir tolket feil (ikke json). Prøv å test uten denne. Det verste som kan skje er at det fortsatt feiler ;-)

Lenke til kommentar
Del på andre sider

44 minutter siden, xibriz skrev:

Her er det bare å sette opp litt bedre debugging for å se hva som som skjer: https://blog.kettle.io/debugging-curl-requests-in-php/

 

Takk, det ga litt mer!

Sitat

* TCP_NODELAY set
* Connected to api.tibber.com (52.50.41.81) port 443 (#0)
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
* SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
* ALPN, server accepted to use http/1.1
* Server certificate:
*  subject: OU=Domain Control Validated; OU=Hosted by Secure Sockets Laboratories; CN=*.tibber.com
*  start date: Apr 28 00:00:00 2017 GMT
*  expire date: Apr 28 23:59:59 2018 GMT
*  subjectAltName: host "api.tibber.com" matched cert's "*.tibber.com"
*  issuer: C=US; O=SSL.com; OU=www.ssl.com; CN=SSL.com DV CA
*  SSL certificate verify ok.
> POST /v1-beta/gql HTTP/1.1
Host: api.tibber.com
Accept: */*
Content-Type: application/json
Authorization: Bearer d1007ead2dc84a2b82f0de19451c5fb22112f7ae11d19bf2bedb224a003ff74a
Content-Length: 101

* upload completely sent off: 101 out of 101 bytes
< HTTP/1.1 200 OK
< Date: Mon, 08 Jan 2018 10:53:44 GMT
< Content-Type: application/json
< Transfer-Encoding: chunked
< Connection: keep-alive
< Server: nginx/1.13.7
< X-Powered-By: Express
< Access-Control-Allow-Origin: *
< Vary: Accept-Encoding
< 
* Connection #0 to host api.tibber.com left intact
"

 

Men jeg ser ikke akkurat noe feil...?

 

4 minutter siden, Guahtdim skrev:

Mulig det er at du spesifiserer post to ganger. 

 

CURLOPT_POST

A parameter set to 1 tells libcurl to do a regular HTTP post. This will also make the library use a "Content-Type: application/x-www-form-urlencoded" header.

 

Mulig det at du setter den gjør at din postinfo blir tolket feil (ikke json). Prøv å test uten denne. Det verste som kan skje er at det fortsatt feiler ;-)

 

Prøvde med og uten den, ingen forskjell.

Lenke til kommentar
Del på andre sider

1 time siden, xibriz skrev:

Har du sjekket at 


$json

inneholder korrekt formatert data?

 

Kan jo hende json_encode driver med noe escaping av dataen.

 

Ja, jeg har til og med kopiert den inn fra samme fil som jeg testet curl.exe fra:

Sitat

{"query":"{viewer {homes {currentSubscription {priceInfo {current {total energy tax startsAt }}}}}}"}

 

Kjørte den også gjennom en JSON-validator, og det er gyldig JSON.

Lenke til kommentar
Del på andre sider

Nå virker det!

Vet ikke helt hva som gjorde utslaget, for et eller annet sted i feilsøkingen har jeg greid å ta vekk "echo $response"... ?

 

<?php
$json = '{"query":"{viewer {homes {currentSubscription {priceInfo {current {total energy tax startsAt }}}}}}"}';

# Create a connection
$ch = curl_init('https://api.tibber.com/v1-beta/gql');
# Setting our options
curl_setopt($ch, CURLOPT_URL, 'https://api.tibber.com/v1-beta/gql');
curl_setopt($ch, CURLOPT_HTTPHEADER, 
   array('Content-Type: application/json',  
   'Authorization: Bearer d1007ead2dc84a2b82f0de19451c5fb22112f7ae11d19bf2bedb224a003ff74a')); 
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

# Get the response
$response = curl_exec($ch);
curl_close($ch);

echo '<pre>';
echo $json.'<br>';
echo json_encode(json_decode($response), JSON_PRETTY_PRINT);
?>

Da er det bare å dytte den inn i HomeSeer via JSON-interfacet, inntil @Moskus får laget en Tibber-plugin... ;):P 

Lenke til kommentar
Del på andre sider

  • 4 uker senere...
På 1/8/2018 den 13.37, ZoRaC skrev:

Nå virker det!

Vet ikke helt hva som gjorde utslaget, for et eller annet sted i feilsøkingen har jeg greid å ta vekk "echo $response"... 1f633.png

 


<?php
$json = '{"query":"{viewer {homes {currentSubscription {priceInfo {current {total energy tax startsAt }}}}}}"}';

# Create a connection
$ch = curl_init('https://api.tibber.com/v1-beta/gql');
# Setting our options
curl_setopt($ch, CURLOPT_URL, 'https://api.tibber.com/v1-beta/gql');
curl_setopt($ch, CURLOPT_HTTPHEADER, 
   array('Content-Type: application/json',  
   'Authorization: Bearer d1007ead2dc84a2b82f0de19451c5fb22112f7ae11d19bf2bedb224a003ff74a')); 
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

# Get the response
$response = curl_exec($ch);
curl_close($ch);

echo '<pre>';
echo $json.'<br>';
echo json_encode(json_decode($response), JSON_PRETTY_PRINT);
?>

Da er det bare å dytte den inn i HomeSeer via JSON-interfacet, inntil @Moskus får laget en Tibber-plugin... ;):P 

 

Har noen laget Plugin enda, eller skal jeg bare starte ?:) Byttet til tibber selv for 10 minutter siden :)

Lenke til kommentar
Del på andre sider

1 time siden, Salvesen skrev:

Har noen laget Plugin enda, eller skal jeg bare starte ?:) Byttet til tibber selv for 10 minutter siden :)

Jeg har begynt. :)

... og har dialog med Tibber-utviklerne. Jeg venter på at de skal gjøre ferdig en egen .NET-modul, så blir det enda enklere å programmere enn å måtte gå omveien via JSON (ikke at det er et problem, men det blir enklere ;) ).

  • Like 3
Lenke til kommentar
Del på andre sider

7 minutter siden, Moskus skrev:

Jeg har begynt. :)

... og har dialog med Tibber-utviklerne. Jeg venter på at de skal gjøre ferdig en egen .NET-modul, så blir det enda enklere å programmere enn å måtte gå omveien via JSON (ikke at det er et problem, men det blir enklere ;) ).

 

Kult, da lager jeg bare noen script i mellomtiden ;)

Lenke til kommentar
Del på andre sider

  • 1 år senere...

Blåser litt liv i denne gamle tråden og håper noen har tid til litt PHP assistanse.

 

Har akkurat gått over til Tibber og tenkte å bruke deres API for integrere mot mitt smarthus system som er tyske IP-Symcon.

Dette er basert på PHP og fikk akkurat til å benytte ZoRaC sitt script for query mot Tibber.

Men programmeringskunnskapene mine er lik null, og jeg skjønner ikke helt hvordan jeg skal gå videre for å dekode JSON dataene og skrive dette til float variabler i scriptet.

 

 

{"query":"{viewer {homes {currentSubscription {priceInfo {current {total energy tax startsAt }}}}}}"}{
    "data": {
        "viewer": {
            "homes": [
                {
                    "currentSubscription": {
                        "priceInfo": {
                            "current": {
                                "total": 0.4663,
                                "energy": 0.3411,
                                "tax": 0.1252,
                                "startsAt": "2019-06-19T06:00:00+02:00"
                            }
                        }
                    }
                }
            ]
        }
    }
}

 

Hvordan kan jeg hente ut feks "total": 0.4663, og skrive dette til en variabel i PHP?

Noen som har noen gode tips?

 

https://www.symcon.de/en/service/documentation/command-reference/access-variables/

 

Mvh

Andreas 

Lenke til kommentar
Del på andre sider

32 minutter siden, ZoRaC skrev:

Prøv en var_dump($response['data']['viewer']['homes']);

og se hva den spytter ut da. 

 

Mener $response inneholder resultatet og kan leses som et vanlig array. :) 

 

Får dette da. Som sagt så er jeg helt grønn så må nok lese litt opp på hvordan resultatet kan leses ut av ett array også.

Warning:  Illegal string offset 'data' in /var/lib/symcon/scripts/20464.ips.php on line 22
Warning:  Illegal string offset 'viewer' in /var/lib/symcon/scripts/20464.ips.php on line 22
Warning:  Illegal string offset 'homes' in /var/lib/symcon/scripts/20464.ips.php on line 22
string(1) "{"
Lenke til kommentar
Del på andre sider

20 minutter siden, Dreeas skrev:

Da får jeg:

Fatal error:  Uncaught Error: Cannot use object of type stdClass as array in /var/lib/symcon/scripts/20464.ips.php:23
Stack trace:
#0 {main}
  thrown in /var/lib/symcon/scripts/20464.ips.php on line 23

 

Hmm... sjelden jeg holder på med PHP, så var litt vrient å ta det på husken. ? 

 

Sånn da?

var_dump(json_decode($response)->data->viewer->homes);

 

Lenke til kommentar
Del på andre sider

Fikk ett svar i det tyske forumet til Symcon, kunne hente ut data slik:

 

$data = json_decode($response); 

$current = $data->data->viewer->homes[0]; 

$total = $current->currentSubscription->priceInfo->current->total; 
var_dump($total); 

$energy = $current->currentSubscription->priceInfo->current->energy; 
var_dump($energy); 

$tax = $current->currentSubscription->priceInfo->current->tax; 
var_dump($tax);  

Takk for hjelpen. Jeg kommer sikkert tilbake når jeg har fått koblet til Pulse og abbonementet med Tibber er fyrt i gang ?

 

  • Like 1
Lenke til kommentar
Del på andre sider

  • 2 år senere...

Hva slags enhet / valuta er prisene som kommer fra Tibber API?

 

Får ikke dette helt til å stemme med dagens priser (fra demo query på siden til Tibber):

 

                {
                  "total": 0.137,
                  "energy": 0.1016,
                  "tax": 0.0354,
                  "startsAt": "2022-06-09T00:00:00.000+02:00",
                  "level": "NORMAL"
                },

Lenke til kommentar
Del på andre sider

OlavT skrev (14 minutter siden):

Hva slags enhet / valuta er prisene som kommer fra Tibber API?

 

Får ikke dette helt til å stemme med dagens priser (fra demo query på siden til Tibber):

 

                {
                  "total": 0.137,
                  "energy": 0.1016,
                  "tax": 0.0354,
                  "startsAt": "2022-06-09T00:00:00.000+02:00",
                  "level": "NORMAL"
                },


Skal være kr/kWh. 
Bruker du din egen token eller demo-token? Demo-token gir ikke reelle priser. 

Lenke til kommentar
Del på andre sider

Bli med i samtalen

Du kan publisere innhold nå og registrere deg senere. Hvis du har en konto, logg inn nå for å poste med kontoen din.

Gjest
Skriv svar til emnet...

×   Du har limt inn tekst med formatering.   Lim inn uten formatering i stedet

  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.

×
×
  • Opprett ny...

Viktig informasjon

Vi har plassert informasjonskapsler/cookies på din enhet for å gjøre denne siden bedre. Du kan justere dine innstillinger for informasjonskapsler, ellers vil vi anta at dette er ok for deg.