Plotting graphs with plot.ly service with luup scene using REST API
-
Excellent, thanks! This is much needed.
For some reason, can't get this to work...LUA error.
I'm trying to send MySensors data to Plotly...
Anyway, does e.g. <username> mean that you write username, or <username> to the script? (Oh yeah, username referring to the actual username :-) ) -
Excellent, thanks! This is much needed.
For some reason, can't get this to work...LUA error.
I'm trying to send MySensors data to Plotly...
Anyway, does e.g. <username> mean that you write username, or <username> to the script? (Oh yeah, username referring to the actual username :-) )@Nuubi
Yes, the username and API key are shown on the plot.ly api settings page.Here is my code that works for 5 lines in one graph and appends data every 5 minutes:
-- Get variables local BRHum = luup.variable_get("urn:micasaverde-com:serviceId:HumiditySensor1", "CurrentLevel", 83) local BRTemp = luup.variable_get("urn:upnp-org:serviceId:TemperatureSensor1", "CurrentTemperature", 84) local ACBoost = 100 * luup.variable_get("urn:upnp-org:serviceId:SwitchPower1", "Status", 106) local ACMech = 100 * luup.variable_get("urn:upnp-org:serviceId:SwitchPower1", "Status", 107) local ACEff = luup.variable_get("urn:upnp-org:serviceId:Dimming1", "LoadLevelStatus", 88 ) local ts = os.date("%Y-%m-%d %X") -- Send to plot local http = require("socket.http") http.TIMEOUT = 5 result, status = http.request("https://plot.ly/clientresp",'un=<username>&key= <APIKey>&origin=plot&platform=lisp&args=[{"x":["'..ts..'"],"y":['..BRHum..'],"name":"Humidity"},{"x":["'..ts..'"],"y": ['..ACBoost..'],"name":"AC Boost"},{"x":["'..ts..'"],"y":['..BRTemp..'],"name":"Temperature"},{"x":["'..ts..'"],"y":['..ACMech..'],"name":"Mech Sensor"},{"x":["'..ts..'"],"y":['..ACEff..'],"name":"AC Efficiency"}]&kwargs={"filename":"BathroomHumidity","fileopt":"extend","style":{"type":"scatter"},"traces":[0,1,2,3,4],"layout":{"title":"Bathroom Humidity"},"world_readable":false}')
I know the JSON syntax is cryptic in one line without pretty formatting..
-
You should use username and not <username>. The same goes for the API key.
In UI5 you can test your Lua in Vera from APPS -> Develop Apps -> Test Luup code
Here is a few more examples of variable_get:
local InAirHum = luup.variable_get("urn:micasaverde-com:serviceId:HumiditySensor1", "CurrentLevel", 347)
local OutTemp = luup.variable_get("urn:upnp-org:serviceId:TemperatureSensor1","CurrentTemperature", 229)
local InAirTemp = luup.variable_get("urn:upnp-org:serviceId:TemperatureSensor1","CurrentTemperature", 346)
local InAirQ = luup.variable_get("urn:upnp-org:serviceId:VContainer1", "Variable1", 348) -
I'm having trouble with one variable to. I would like to have the status of a qubino switch in the same graph.
I tried this:
local VentOn = 100 luup.variable_get("urn:upnp-org:serviceId:BinaryLight1", "Status", 356)It gives me the value 100 in the graph. Please let me know what this 100 in front of the luup.variable_get does. If I remove it the Luup code fails.
-
I'm having trouble with one variable to. I would like to have the status of a qubino switch in the same graph.
I tried this:
local VentOn = 100 luup.variable_get("urn:upnp-org:serviceId:BinaryLight1", "Status", 356)It gives me the value 100 in the graph. Please let me know what this 100 in front of the luup.variable_get does. If I remove it the Luup code fails.
@korttoma said:
I'm having trouble with one variable to. I would like to have the status of a qubino switch in the same graph.
I tried this:
local VentOn = 100 luup.variable_get("urn:upnp-org:serviceId:BinaryLight1", "Status", 356)It gives me the value 100 in the graph. Please let me know what this 100 in front of the luup.variable_get does. If I remove it the Luup code fails.
Actually there should be asterisk character between 100 and the luup.variable_get and the (forum editor does not show that) since the returned value 1 or 0 is scaled to 100 so try:
local VentOn = 100 * luup.variable_get("urn:upnp-org:serviceId:BinaryLight1", "Status", 356)Then you get 100 if binary light is on. Remove the 100 if you like it to be 1 or 0.
-
Uh...oh...still.. do you need to initialize the graph or what? Still not getting this to work, sorry for being such a dummie :-E
-
@korttoma said:
I'm having trouble with one variable to. I would like to have the status of a qubino switch in the same graph.
I tried this:
local VentOn = 100 luup.variable_get("urn:upnp-org:serviceId:BinaryLight1", "Status", 356)It gives me the value 100 in the graph. Please let me know what this 100 in front of the luup.variable_get does. If I remove it the Luup code fails.
Actually there should be asterisk character between 100 and the luup.variable_get and the (forum editor does not show that) since the returned value 1 or 0 is scaled to 100 so try:
local VentOn = 100 * luup.variable_get("urn:upnp-org:serviceId:BinaryLight1", "Status", 356)Then you get 100 if binary light is on. Remove the 100 if you like it to be 1 or 0.
@samppa said:
Actually there should be asterisk character between 100 and the luup.variable_get and the (forum editor does not show that) since the returned value 1 or 0 is scaled to 100 so try:
local VentOn = 100 * luup.variable_get("urn:upnp-org:serviceId:BinaryLight1", "Status", 356)
Then you get 100 if binary light is on. Remove the 100 if you like it to be 1 or 0.I thought it was a multiplier of some kind. Anyhow the code fails allso if I add the asterisk so I thik it has a problem with:
luup.variable_get("urn:upnp-org:serviceId:BinaryLight1", "Status", 356)Any suggestions what I should try instead? Tried also this but no luck:
luup.variable_get("urn:micasaverde-com:serviceId:BinaryLight1", "Status", 356) -
Had a chat with @BulldogLowell and he taught me that you can hover the mouse on a variable to check the complete variable name so it turned out I had to use the following:
luup.variable_get("urn:micasaverde-com:serviceId:SwitchPower1", "Status", 356) -
@Nuubi said:
Uh...oh...still.. do you need to initialize the graph or what? Still not getting this to work, sorry for being such a dummie :-E
You just send the data and the graph named with "filename":"xxxx" gets created if not yet existing.
-
@samppa Yep, works now, thanks!
The problem turned out to be the actual value I wanted to send. Need to figure out how to read MySensors based values in LUA...have you tried luup.inet.wget( )
local brightness = luup.variable_get("urn:upnp-org:serviceId:Dimming1", "LoadLevelStatus", 118) luup.inet.wget("192.168.1.50//?brightLevel="..brightness.."&", 1) -
Anyone figured out a way to add another variable to an old graph without deleting the file from plot.ly? Seems like it does not include the new variable unless you delete and create a new file.
@korttoma said:
Anyone figured out a way to add another variable to an old graph without deleting the file from plot.ly? Seems like it does not include the new variable unless you delete and create a new file.
I have noticed the same thing; If you want to add a trace you need to delete the file..
So perhaps it is wise to be prepared and add a few extra traces for some future use. -
@korttoma said:
Anyone figured out a way to add another variable to an old graph without deleting the file from plot.ly? Seems like it does not include the new variable unless you delete and create a new file.
I have noticed the same thing; If you want to add a trace you need to delete the file..
So perhaps it is wise to be prepared and add a few extra traces for some future use.@samppa said:
perhaps it is wise to be prepared and add a few extra traces for some future use.
Good suggestion for a workaround but it does not seem to pick up name changes for the trace either. Tried also to edit one of the plots on the website but when I wanted to save I could not save the changes to the file used by "Vera". I had to save the file with a different name so no editing seems to be possible.
-
Since the nightly heal at 2 in the morning no data is transferred to plot.ly any more :( anyone else see this and know how to solv it?
-
I sent them some feedback to but have not heard anything yet. Maybe we should try the "Streaming API" instead?