| 
		
	
	
	
		
	Posts: 78 
	Threads: 5 
	Joined: Sep 2016
	
 Reputation: 
4 
	
	
		I have been trying to pull some data like power consumption and prices. Limited Lua/json scripting skills have brought it to a stop, can anybody help`?  
API Guide https://developer.tibber.com/docs/guides/calling-api
Best regards, Jørn.
 
		
	 
	
	
	
		
	Posts: 8413 
	Threads: 45 
	Joined: Jun 2015
	
 Reputation: 
481 
	
	
		Change token and data query as needed: Code: https = require('ssl.https')json = require('json')
 ltn12 = require('ltn12')
 
 token = 'd1007ead2dc84a2b82f0de19451c5fb22112f7ae11d19bf2bedb224a003ff74a'
 
 data = json.encode({
 query = '{viewer {homes {currentSubscription {priceInfo {current {total energy tax startsAt }}}}}}'
 })
 
 tbl = {}
 res, code = https.request({
 url = 'https://api.tibber.com/v1-beta/gql',
 method = 'POST',
 headers = {
 ['authorization'] = 'Bearer ' .. token,
 ['content-type']  = 'application/json',
 ['content-length'] = #data,
 },
 source = ltn12.source.string(data),
 sink = ltn12.sink.table(tbl),
 })
 
 if res and code == 200 then
 resp = table.concat(tbl)
 resp = json.pdecode(resp)
 
 log(resp)
 else
 log(res, code)
 end
		
	 
	
	
	
		
	Posts: 78 
	Threads: 5 
	Joined: Sep 2016
	
 Reputation: 
4 
	
	
		Superb! But i get "nesting too deep" before all data is retrieved, is this issue on Tibber  side or LM `? 
 Code: * table:[data]
 * table:
 [viewer]
 * table:
 [homes]
 * table:
 [1]
 * table:
 [currentSubscription]
 * table:
 [priceInfo]
 * table:
 nesting too deep
Best regards, Jørn.
 
		
	 
	
	
	
		
	Posts: 8413 
	Threads: 45 
	Joined: Jun 2015
	
 Reputation: 
481 
	
	
		There's a limit of how deep the table can be for log() function, try this: Code: log(resp.data.viewer.homes)
		
	 
	
	
	
		
	Posts: 41 
	Threads: 9 
	Joined: Apr 2018
	
 Reputation: 
0 
	
	
		Hi,
 How de we retrieve a value from table within table here, and write this to a group address?
 
 grp.write('32/1/16', 'tbl[1][1][1][1][4][1]')?
 
 kind regards
 thomas
 
		
	 
	
	
	
		
	Posts: 8413 
	Threads: 45 
	Joined: Jun 2015
	
 Reputation: 
481 
	
	
		Depends, can you show log output for this table?
	 
		
	 
	
	
	
		
	Posts: 41 
	Threads: 9 
	Joined: Apr 2018
	
 Reputation: 
0 
	
	
	
		
	Posts: 8413 
	Threads: 45 
	Joined: Jun 2015
	
 Reputation: 
481 
	
	
		Code: homes = resp.data.viewer.homesinfo = homes[ 1 ].currentSubscription.priceInfo.current
 log(info.energy)
 log(info.tax)
 log(info.total)
 
		
	 
	
	
	
		
	Posts: 41 
	Threads: 9 
	Joined: Apr 2018
	
 Reputation: 
0 
	
	
		That worked :-) Thank you again :-)
	 
		
	 
	
	
	
		
	Posts: 32 
	Threads: 12 
	Joined: Oct 2015
	
 Reputation: 
0 
	
	
		Hi 
 I've been testing this for a while, and get all the readings from viewer, homes, currentSubscriptions and so on.
 But the liveMeasurement I can't really figure out.
 
 Have anyone got this to work?
 
 Eirik
 
		
	 
	
	
	
		
	Posts: 62 
	Threads: 12 
	Joined: Oct 2019
	
 Reputation: 
0 
	
	
		Very interesting. Anyone who knows how to also integrate the current Power consumption and data from the TIBBER PULSE ? Would be great With some help.
	 
Schneider Wiser (homeLynk), Power Tags, DALI, Multitouch Pro, Panasonic Heating pump, Flexit balansed ventilation, HUE integration, Lemus Speaker system. Tibber integration.
 
		
	 
	
	
	
		
	Posts: 62 
	Threads: 12 
	Joined: Oct 2019
	
 Reputation: 
0 
	
		
		
		01.03.2020, 22:26 
(This post was last modified: 11.01.2023, 18:13 by stemic01.)
		
	 
		I would really like to get the live consumption "REAL TIME SUBSCRIPTION" data for visualization and making trends. https://developer.tibber.com/Explorer  (Demo token / Real time Consumption)
 
Would be deeply greatfull if any of you LUA specialists were able to help me retrieve this data and for example Write it to a Group address I could call in my Dashboard Interface. 
 
Here is the "code" from the Tibber  API. How to get this into something usefull in LUA? 
 
subscription{ 
  liveMeasurement(homeId:"xxxxxxxxxxxxxxxxxxxxx"){ 
    timestamp 
    power 
    accumulatedConsumption 
    accumulatedCost 
    currency 
    minPower 
    averagePower 
    maxPower 
  } 
}
	
Schneider Wiser (homeLynk), Power Tags, DALI, Multitouch Pro, Panasonic Heating pump, Flexit balansed ventilation, HUE integration, Lemus Speaker system. Tibber integration.
 
		
	 
	
	
	
		
	Posts: 62 
	Threads: 12 
	Joined: Oct 2019
	
 Reputation: 
0 
	
	
		I try to boost this thread again. Any takers?
	 
Schneider Wiser (homeLynk), Power Tags, DALI, Multitouch Pro, Panasonic Heating pump, Flexit balansed ventilation, HUE integration, Lemus Speaker system. Tibber integration.
 
		
	 
	
	
	
		
	Posts: 8413 
	Threads: 45 
	Joined: Jun 2015
	
 Reputation: 
481 
	
	
		Use this websocket client library: https://forum.logicmachine.net/showthrea...23#pid7823 
Create a user library named websocket  and add this line after 'Connection: Upgrade',  (line 289):
 Code: 'Sec-WebSocket-Protocol: graphql-ws',
Example resident script, sleep time = 0, change token and homeId as needed:
 Code: if not client thenws = require('user.websocket')
 json = require('json')
 token = 'd1007ead2dc84a2b82f0de19451c5fb22112f7ae11d19bf2bedb224a003ff74a'
 
 query = [[
 subscription{
 liveMeasurement(homeId:"c70dcbe5-4485-4821-933d-a8a86452737b"){
 timestamp
 power
 accumulatedConsumption
 accumulatedCost
 currency
 minPower
 averagePower
 maxPower
 }
 }
 ]]
 
 url = 'wss://api.tibber.com/v1-beta/gql/subscriptions'
 
 client, err = ws.client('sync', 10)
 res, err = client:connect(url)
 
 if res then
 client:send(json.encode({
 type = 'connection_init',
 payload = 'token=' .. token,
 }))
 
 client:send(json.encode({
 id = 1,
 type = 'start',
 payload = {
 query = query
 }
 }))
 else
 log('connection failed: ' .. tostring(err))
 client:close()
 client = nil
 end
 else
 data, _, _, opcode, err = client:receive()
 
 if data then
 data = json.pdecode(data)
 
 if data then
 log(data)
 end
 else
 log('receive failed: ' .. tostring(err))
 client:close()
 client = nil
 end
 end
		
	 
	
	
	
		
	Posts: 78 
	Threads: 5 
	Joined: Sep 2016
	
 Reputation: 
4 
	
		
		
		03.04.2020, 18:49 
(This post was last modified: 03.04.2020, 18:50 by Jørn.)
		
	 
		Works great    But, how to pull data from the table to i.e. to a grp.write`?
	
Best regards, Jørn.
 
		
	 
	
	
	
		
	Posts: 1807 
	Threads: 7 
	Joined: Jul 2015
	
 Reputation: 
121 
	
		
		
		04.04.2020, 07:23 
(This post was last modified: 04.04.2020, 07:23 by Erwin van der Zwart.)
		
	 
		Hi, 
At line 51 (log data) your need to add your code, look at the data table and select the value you want to send to KNX, i don't know the content of the data fields but something like:
 Code: -- log(data)grp.checkwrite('1/1/1', data.yoursubfield1)
 grp.checkwrite('1/1/2', data.yoursubfield2)
BR,
 
Erwin
	
		
	 
	
	
	
		
	Posts: 78 
	Threads: 5 
	Joined: Sep 2016
	
 Reputation: 
4 
	
	
		 (04.04.2020, 07:23)Erwin van der Zwart Wrote:  Hi,
 At line 51 (log data) your need to add your code, look at the data table and select the value you want to send to KNX, i don't know the content of the data fields but something like:
 
 BR,Code: -- log(data)grp.checkwrite('1/1/1', data.yoursubfield1)
 grp.checkwrite('1/1/2', data.yoursubfield2)
 Erwin
 
I've tried different combinations of this with no luck. I.e. data.power is nil. 
The "data" table looks like this
 Code: Tibber websocket 04.04.2020 15:53:26* table:
 ["type"]
 * string: data
 ["payload"]
 * table:
 ["data"]
 * table:
 ["liveMeasurement"]
 * table:
 ["timestamp"]
 * string: 2020-04-04T15:53:26+02:00
 ["accumulatedCost"]
 * number: 5.133123
 ["maxPower"]
 * number: 8190
 ["power"]
 * number: 1555
 ["currency"]
 * string: NOK
 ["averagePower"]
 * number: 4301.6
 ["accumulatedConsumption"]
 * number: 68.357767
 ["minPower"]
 * number: 1269
 ["id"]
 * number: 1
 
Best regards, Jørn.
 
		
	 
	
	
	
		
	Posts: 8413 
	Threads: 45 
	Joined: Jun 2015
	
 Reputation: 
481 
	
	
		Try data.payload.data.liveMeasurement.power
	 
		
	 
	
	
	
		
	Posts: 78 
	Threads: 5 
	Joined: Sep 2016
	
 Reputation: 
4 
	
		
		
		04.04.2020, 14:05 
(This post was last modified: 04.04.2020, 14:12 by Jørn.)
		
	 
		That worked ;o) But sometimes report error attempt to index field 'payload' (a nil value) stack traceback:why would this be`?
 
Best regards, Jørn.
 
		
	 
	
	
	
		
	Posts: 1807 
	Threads: 7 
	Joined: Jul 2015
	
 Reputation: 
121 
	
		
		
		05.04.2020, 00:10 
(This post was last modified: 05.04.2020, 00:11 by Erwin van der Zwart.)
		
	 
		Hi, 
You should check if the table content is valid before drilling down deeper...
 Code: if data thenif data.payload then
 if data.payload.power then
 grp.checkwrite('1/1/1’, data.payload.power)
 end
 end
 end
BR,
 
Erwin
	
		
	 |