LogicMachine Forum
influxdb library - Printable Version

+- LogicMachine Forum (https://forum.logicmachine.net)
+-- Forum: LogicMachine eco-system (https://forum.logicmachine.net/forumdisplay.php?fid=1)
+--- Forum: Scripting (https://forum.logicmachine.net/forumdisplay.php?fid=8)
+--- Thread: influxdb library (/showthread.php?tid=1666)



influxdb library - Matt - 20.10.2018

I am sharing a way to send easily object values to influxdb.

Update server and database name before using it.
influx_clim send object with tag "influx_clim"
add "influx_clim()" to a schedule for automatic export


Code:
require 'ltn12' require 'socket.http' local https = require("ssl.https") local influxdb_debug = true local influxdb_server = "https://user:pass@host:8086" local influxdb_database = "db_name" local influxdb_buffer --function used to convert object name (logicmachine) to valid influxdb field key function influxdb_normalize(name)  return string.gsub(name,  " ", "_") end --add an entry to be send function influxdb_add(line_protocol)  if (influxdb_debug) then    alert("influxdb_add start")  end    if influxdb_buffer then    influxdb_buffer = influxdb_buffer .. "\n" .. tostring(line_protocol)  else    influxdb_buffer =  tostring(line_protocol)  end    if (influxdb_debug) then    alert("influxdb_add done")  end   end function influxdb_current()  return influxdb_buffer end -- send the buffer to influxdb function influxdb_send()    if (influxdb_debug) then    alert("influxdb_send start")  end    local request_insert_url = influxdb_server .. "/write?db=" .. influxdb_database   --  log(influxdb_buffer)    local response_body = { }  local body, code, hdrs, stat = https.request  {    url = request_insert_url;    verify = "none";    method = "POST";    headers =    {      ["Content-Length"] = #influxdb_buffer;    };    source = ltn12.source.string(influxdb_buffer);    sink = ltn12.sink.table(response_body);  }  influxdb_buffer = nil  if (code ~= 204) then    alert("influxdb error code:" .. tostring(code))    alert("influxdb_send http post error")  end  if (influxdb_debug) then       alert("influxdb_send done")  end   end --export all objects with tag "influx_clim" function influx_clim()    local values=grp.tag("influx_clim")  if (influxdb_debug) then    alert("influx_cilm start")  end  local txtvalues = ""  for index, id in ipairs(values) do    -- add separator    if (#txtvalues>0) then      txtvalues = txtvalues .. ","    end      -- calculate value to be sent    if (type(id["data"])=="boolean") then      value=id["data"] and 1 or 0    else      value=id["data"]    end    -- add key value pair    txtvalues = txtvalues .. influxdb_normalize(id["name"]) .. "=" .. value  end  influxdb_add("clim " .. txtvalues)  influxdb_send()  if (debug) then    alert("influx_cilm end")  end end



RE: influxdb library - Domoticatorino - 03.11.2020

(20.10.2018, 21:13)Matt Wrote: I am sharing a way to send easily object values to influxdb.

Update server and database name before using it.
influx_clim send object with tag "influx_clim"
add "influx_clim()" to a schedule for automatic export


Code:
require 'ltn12' require 'socket.http' local https = require("ssl.https") local influxdb_debug = true local influxdb_server = "https://user:pass@host:8086" local influxdb_database = "db_name" local influxdb_buffer --function used to convert object name (logicmachine) to valid influxdb field key function influxdb_normalize(name)  return string.gsub(name,  " ", "_") end --add an entry to be send function influxdb_add(line_protocol)  if (influxdb_debug) then    alert("influxdb_add start")  end    if influxdb_buffer then    influxdb_buffer = influxdb_buffer .. "\n" .. tostring(line_protocol)  else    influxdb_buffer =  tostring(line_protocol)  end    if (influxdb_debug) then    alert("influxdb_add done")  end   end function influxdb_current()  return influxdb_buffer end -- send the buffer to influxdb function influxdb_send()    if (influxdb_debug) then    alert("influxdb_send start")  end    local request_insert_url = influxdb_server .. "/write?db=" .. influxdb_database   --  log(influxdb_buffer)    local response_body = { }  local body, code, hdrs, stat = https.request  {    url = request_insert_url;    verify = "none";    method = "POST";    headers =    {      ["Content-Length"] = #influxdb_buffer;    };    source = ltn12.source.string(influxdb_buffer);    sink = ltn12.sink.table(response_body);  }  influxdb_buffer = nil  if (code ~= 204) then    alert("influxdb error code:" .. tostring(code))    alert("influxdb_send http post error")  end  if (influxdb_debug) then       alert("influxdb_send done")  end   end --export all objects with tag "influx_clim" function influx_clim()    local values=grp.tag("influx_clim")  if (influxdb_debug) then    alert("influx_cilm start")  end  local txtvalues = ""  for index, id in ipairs(values) do    -- add separator    if (#txtvalues>0) then      txtvalues = txtvalues .. ","    end      -- calculate value to be sent    if (type(id["data"])=="boolean") then      value=id["data"] and 1 or 0    else      value=id["data"]    end    -- add key value pair    txtvalues = txtvalues .. influxdb_normalize(id["name"]) .. "=" .. value  end  influxdb_add("clim " .. txtvalues)  influxdb_send()  if (debug) then    alert("influx_cilm end")  end end

Hi, I am working on this script but It seems it does not work.

I mean that I use the script above in a library and in a scheduled script which runs everyminute I wrote as followed:

objs = grp.tag('influx_clim')
require ('user.influx')

The problem is that I expect some alert message (correct or incorrect) but nothing happened. How can sort it out?

Thanks.


RE: influxdb library - Matt - 04.11.2020

In the schedule, you only need to have:

Code:
influx_clim()



RE: influxdb library - Domoticatorino - 18.11.2020

(04.11.2020, 12:42)Matt Wrote: In the schedule, you only need to have:

Code:
influx_clim()

Sorry but I forgot to leave the feedback.

Everything works fine.

Thanks.

BR