This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm that you accept these cookies being set.

Trend clean
#11
great this work for me !! Your top


Code:
ffi = require('ffi')

typName=true
typCat=false
typTotal=false
maxVal=4/60/60


function check(value)
  max = math.max(max, value)
  log(value)
  if value > maxVal then
    value=maxVal
    --log(value)
  end
  return value
end

function stringtodouble(chunk)
  local dbl = ffi.new('double[1]')
  ffi.copy(dbl, chunk, 8)
  return dbl[ 0 ]
end

function doubletostring(val)
  local dbl = ffi.new('double[1]')
  dbl[ 0 ] = val
  return ffi.string(dbl, 8)
end

function wash(filename,maxVal)
  max = 0
  info = require('rrd').info(filename)

  data = io.readfile(filename)
  offset = info.header_size

  buf = { data:sub(1, offset) }

  while true do
    chunk = data:sub(offset + 1, offset + 8)

    if #chunk == 8 then
      value = stringtodouble(chunk)

      -- skip NaN (empty/undefined value)
      if value == value then
        value=check(value)
      end
     

      buf[ #buf + 1 ] = doubletostring(value)
    else
      break
    end

    offset = offset + 8
  end

  log('MAX:'..max)
  data = table.concat(buf)
  io.writefile(filename, data)
 
end






if typName then
  tabCurveName= {
  --'ADLC-TOTAL-KWH',
  --'TG2-TOTAL-KWH',
  --'ECLAIRAGE-TOTAL-KWH',
  --'GENERAL_ELEC-TOTAL-KWH',
  --'ADLC-01_ECLAIRAGE-KWH-ECL',
  --'CHAUFFAGE_CLIMATISATION_VENTILATION-TOTAL-KWH',
  --'RECE-01_ECLAIRAGE-KWH-ECL'
  --'ADN0-TOTAL-KWH',
  --'RECE-TOTAL-KWH'
    --'DIVERS-TOTAL-KWH',
    --'EAU_CHAUDE-TOTAL-KWH',
    --'PRISES-TOTAL-KWH',
    --'TG1-TOTAL-KWH',
    --'RECE-01_LOCAL_FROID-M3-FLU',
    'ADN2-01_ECLAIRAGE-KWH-ECL'
  }

  for _, curveName in ipairs(tabCurveName) do

        id = db:getone('SELECT id FROM trends WHERE name=?', curveName)

    if id then
      filename = '/tmp/trends/t' .. id .. '.trend'
      --os.remove(file)
      wash(filename,maxVal)
    end

   
        
  end
end
-----------
FRANCE SMARTHOME & SMARTBUILDING INTEGRATION
SE ECO EXPERT
Reply


Messages In This Thread
Trend clean - by domotiqa - 22.11.2023, 07:12
RE: Trend clean - by Daniel - 22.11.2023, 08:42
RE: Trend clean - by domotiqa - 22.11.2023, 08:51
RE: Trend clean - by Daniel - 22.11.2023, 08:54
RE: Trend clean - by domotiqa - 22.11.2023, 08:59
RE: Trend clean - by admin - 22.11.2023, 09:01
RE: Trend clean - by domotiqa - 22.11.2023, 09:25
RE: Trend clean - by domotiqa - 15.12.2023, 07:44
RE: Trend clean - by admin - 15.12.2023, 10:47
RE: Trend clean - by domotiqa - 19.12.2023, 08:23
RE: Trend clean - by domotiqa - 19.12.2023, 16:39

Forum Jump: