ZoRaC Skrevet 8. januar 2018 Skrevet 8. januar 2018 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? Siter
Guahtdim Skrevet 8. januar 2018 Skrevet 8. januar 2018 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 Siter
ZoRaC Skrevet 8. januar 2018 Forfatter Skrevet 8. januar 2018 1 minutt siden, Guahtdim skrev: Her må du skaffe ditt eget token(etter Bearer). Ikke poste det inn her siden enhver da kan gjøre requests som deg. Dette er Tibber sin demo-token fra eksempelet deres, ikke min personlige. Samme som de bruker her: https://developer.tibber.com/explorer Siter
Guahtdim Skrevet 8. januar 2018 Skrevet 8. januar 2018 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.. Siter
xibriz Skrevet 8. januar 2018 Skrevet 8. januar 2018 Her er det bare å sette opp litt bedre debugging for å se hva som som skjer: https://blog.kettle.io/debugging-curl-requests-in-php/ Siter
ZoRaC Skrevet 8. januar 2018 Forfatter Skrevet 8. januar 2018 7 minutter siden, Guahtdim skrev: Jeg så at det var tibber sitt token og har en liten mistanke om at det ikke er aktivt. Det funker via deres API Explorer og via kommandolinje med curl.exe fra PCen min. Siter
Guahtdim Skrevet 8. januar 2018 Skrevet 8. januar 2018 Ok, da er problemet i PHP som jeg ikke har noen peiling på. Noen andre må nok hjelpe deg videre. Siter
Moskus Skrevet 8. januar 2018 Skrevet 8. januar 2018 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! ? Siter
Guahtdim Skrevet 8. januar 2018 Skrevet 8. januar 2018 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 ;-) Siter
ZoRaC Skrevet 8. januar 2018 Forfatter Skrevet 8. januar 2018 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. Siter
xibriz Skrevet 8. januar 2018 Skrevet 8. januar 2018 Har du sjekket at $json inneholder korrekt formatert data? Kan jo hende json_encode driver med noe escaping av dataen. Siter
ZoRaC Skrevet 8. januar 2018 Forfatter Skrevet 8. januar 2018 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. Siter
ZoRaC Skrevet 8. januar 2018 Forfatter Skrevet 8. januar 2018 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... Siter
Salvesen Skrevet 2. februar 2018 Skrevet 2. februar 2018 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"... <?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... Har noen laget Plugin enda, eller skal jeg bare starte ?:) Byttet til tibber selv for 10 minutter siden Siter
Moskus Skrevet 2. februar 2018 Skrevet 2. februar 2018 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 ). 3 Siter
Salvesen Skrevet 2. februar 2018 Skrevet 2. februar 2018 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 Siter
Dreeas Skrevet 19. juni 2019 Skrevet 19. juni 2019 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 Siter
ZoRaC Skrevet 19. juni 2019 Forfatter Skrevet 19. juni 2019 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. Siter
Dreeas Skrevet 19. juni 2019 Skrevet 19. juni 2019 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) "{" Siter
ZoRaC Skrevet 19. juni 2019 Forfatter Skrevet 19. juni 2019 Ah, tror det skulle vært slik i stedet: var_dump(json_decode($response)['data']['viewer']['homes']); Siter
Dreeas Skrevet 19. juni 2019 Skrevet 19. juni 2019 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 Siter
ZoRaC Skrevet 19. juni 2019 Forfatter Skrevet 19. juni 2019 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); Siter
Dreeas Skrevet 23. juni 2019 Skrevet 23. juni 2019 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 ? 1 Siter
OlavT Skrevet 9. juni 2022 Skrevet 9. juni 2022 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" }, Siter
ZoRaC Skrevet 9. juni 2022 Forfatter Skrevet 9. juni 2022 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. Siter
Anbefalte innlegg
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.