06.10.2023, 08:44 
		
	
	
		Hello,
I want to create a csv file for the last 30 days.
I have a script as below, but it creates not that many days. What has to be changed?
/Fredrik
	
	
	
	
I want to create a csv file for the last 30 days.
I have a script as below, but it creates not that many days. What has to be changed?
/Fredrik
Code:
require('trends')
dates = {}
dates['start'] = os.date('*t')
dates['start'].day = dates['start'].day - 1
dates['end'] = os.date('*t')
now = os.time()
function fetch(tname)
  local res = {}
  local values = trends.fetch(tname, dates)
  local count = #values
  local step = 86400 / count
  for i, value in ipairs(values) do
    table.insert(res, {
      now - (count - i) * step,
      value
    })
  end
  return res
end
buf = {
  fetch('LUFTTEMPERATUR W'),
  fetch('NEDERBÖRDSMÄNGD W'),
  fetch('VINDRIKTNING W'),
  fetch('NEDERBÖRD INTENSITET W'),
  fetch('GENOMSNITTLIG VINDHASTIGHET W'),
  fetch('RELATIV LUFTFUKTIGHET W'),
  fetch('MAX VINDHASTIGHET W'),
  fetch('ABSOLUT LUFTTRYCK W')
}
csv = { 'Id,Site Id,Site Authentication Key,Report Date / Time,Temperature,Precipitation accumulated,Wind direction,Precipitation intensity,Average wind, Humidity,Downwind,Air pressure at station' }
for i, row1 in ipairs(buf[ 1 ]) do
  date = os.date('%d/%m/%y %H:%M', row1[ 1 ])
  value1 = row1[ 2 ]
  row2 = buf[ 2 ][ i ] or {}
  value2 = row2[ 2 ] or 0
  
  row3 = buf[ 3 ][ i ] or {}
  value3 = row3[ 2 ] or 0
  
  row4 = buf[ 4 ][ i ] or {}
  value4 = row4[ 2 ] or 0
  
  row5 = buf[ 5 ][ i ] or {}
  value5 = row5[ 2 ] or 0
  
  row6 = buf[ 6 ][ i ] or {}
  value6 = row6[ 2 ] or 0
  
  row7 = buf[ 7 ][ i ] or {}
  value7 = row7[ 2 ] or 0
  
  row8 = buf[ 8 ][ i ] or {}
  value8 = row8[ 2 ] or 0
  
    csv[ #csv + 1 ] = string.format(' fb6ca12c-3106-ee11-913a-201642ba599e,20230608tey3apeggae67rj4rymrfqtn3c,Grimeljer2023!,%s,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f',
    date, value1, value2, value3, value4, value5, value6, value7, value8)
  
end
csv = table.concat(csv, '\n')
log(csv)
to = 'email@email.com'
settings = {
  -- "from" field, only e-mail must be specified here
  from = ' email@email.com ',
  -- smtp username
  user = ' email@email.com ',
  -- smtp password
  password = 'Password',
  -- smtp server
  server = 'smtp.gmail.com',
  -- smtp server port
  port = 465,
  -- enable ssl, required for gmail smtp
  secure = 'sslv23',
}
subject = 'CSV väder'
smtp = require('socket.smtp')
mime = require('mime')
ltn12 = require('ltn12')
function escape(v)
  return '<' .. tostring(v) .. '>'
end
to = escape(to)
msgt = {
  headers = {
    to = to,
    ['content-type'] = 'text/csv',
    ['content-disposition'] = 'attachment; filename="logs.csv"',
    ['content-transfer-encoding'] = 'BASE64',
    subject = subject,
  },
  body = ltn12.source.chain(
    ltn12.source.string(csv),
    ltn12.filter.chain(mime.encode('base64'), mime.wrap('base64'))
  )
}
settings.source = smtp.message(msgt)
settings.from = escape(settings.from)
settings.rcpt = { to }
res, err = smtp.send(settings)
log(res, err) 
 

 
