14.02.2020, 20:16
(This post was last modified: 17.02.2020, 20:19 by Erwin van der Zwart.)
Hi,
Try this:
1) Run code below once to create the logs.lp
2) To have normal decoding use http://<ip>/user/logs.lp?obj=1/1/1
3) To use the custom values during decoding http://<ip>/user/logs.ip?obj=1/1/1&custom=true
4) To reduce or increase the number of lines (default 100) use http://<ip>/user/logs.ip?obj=1/1/1&lines=20 or http://<ip>/user/logs.ip?obj=1/1/1&custom=true&lines=20
BR,
Erwin
Try this:
1) Run code below once to create the logs.lp
2) To have normal decoding use http://<ip>/user/logs.lp?obj=1/1/1
3) To use the custom values during decoding http://<ip>/user/logs.ip?obj=1/1/1&custom=true
4) To reduce or increase the number of lines (default 100) use http://<ip>/user/logs.ip?obj=1/1/1&lines=20 or http://<ip>/user/logs.ip?obj=1/1/1&custom=true&lines=20
Code:
dst = '/www/user/logs.lp'
io.writefile(dst, [[
<?
require('apps')
alias = getvar('obj') or ''
custom = getvar('custom') or 'false'
lines = tonumber(getvar('lines')) or 100
obj = grp.find(alias)
if not obj then
print('object not found')
return
end
function decodevalue(obj, value)
if obj.enums and custom == 'true' then
require('json')
enums = json.pdecode(obj.enums)
if type(value) == 'boolean' then
if value == true then
value = enums['1']
else
value = enums['0']
end
else
value = enums[tostring(value)]
end
if value == nil or value == '' then
value = enums['default']
end
else
dt = {
[1] = {
dttype = 'boolean',
enums = {
[true] = 'true',
[false] = 'false'
}
},
[1001] = {
dttype = 'switch',
enums = {
[true] = 'on',
[false] = 'off'
}
},
[1002] = {
dttype = 'boolean',
enums = {
[true] = 'true',
[false] = 'false'
}
},
[1003] = {
dttype = 'enable',
enums = {
[true] = 'enable',
[false] = 'disable'
}
},
[1004] = {
dttype = 'transition',
enums = {
[true] = 'ramp',
[false] = 'no ramp'
}
},
[1005] = {
dttype = 'alarm',
enums = {
[true] = 'alarm',
[false] = 'no alarm'
}
},
[1006] = {
dttype = 'low/high',
enums = {
[true] = 'high',
[false] = 'low'
}
},
[1007] = {
dttype = 'step',
enums = {
[true] = 'increase',
[false] = 'decrease'
}
},
[1008] = {
dttype = 'up/down',
enums = {
[true] = 'up',
[false] = 'down'
}
},
[1009] = {
dttype = 'open/close',
enums = {
[true] = 'close',
[false] = 'open'
}
},
[1010] = {
dttype = 'start/stop',
enums = {
[true] = 'start',
[false] = 'stop'
}
},
[1011] = {
dttype = 'activity',
enums = {
[true] = 'active',
[false] = 'inactive'
}
},
[1012] = {
dttype = 'inversion',
enums = {
[true] = 'inverted',
[false] = 'not inverted'
}
},
[1013] = {
dttype = 'dim style',
enums = {
[true] = 'cyclically',
[false] = 'start/stop'
}
},
[1014] = {
dttype = 'data source',
enums = {
[true] = 'calculated',
[false] = 'fixed'
}
},
[2] = {
dttype = '2 bit (1 bit controlled)',
enums = {
[0] = 'No control, 0',
[1] = 'No control, 1',
[2] = 'Control, 0',
[3] = 'Control, 1'
}
},
[3] = {
dttype = '4 bit (3 bit controlled)',
enums = {
[0] = 'No control, Break',
[1] = 'No control, Step 1',
[2] = 'No control, Step 2',
[3] = 'No control, Step 3',
[4] = 'No control, Step 4',
[5] = 'No control, Step 5',
[6] = 'No control, Step 6',
[7] = 'No control, Step 7',
[8] = 'Control, Break',
[9] = 'Control, Step 1',
[10] = 'Control, Step 2',
[11] = 'Control, Step 3',
[12] = 'Control, Step 4',
[13] = 'Control, Step 5',
[14] = 'Control, Step 6',
[15] = 'Control, Step 7',
}
},
[3007] = {
dttype = '4 bit dim/blinds step',
enums = {
[0] = 'Stop',
[1] = 'Down 100%',
[2] = 'Down 50%',
[3] = 'Down 25%',
[4] = 'Down 12%',
[5] = 'Down 6%',
[6] = 'Down 3%',
[7] = 'Down 1%',
[8] = 'Stop',
[9] = 'Up 100%',
[10] = 'Up 50%',
[11] = 'Up 25%',
[12] = 'Up 12%',
[13] = 'Up 6%',
[14] = 'Up 3%',
[15] = 'Up 1%',
}
}
}
if dt[obj.datatype] then
value = dt[obj.datatype]['enums'][value]
end
end
return value
end
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Object logs</title>
<link rel="stylesheet" href="/apps/css/bootstrap.css">
<style>
.table { table-layout: fixed; }
</style>
</head>
<body>
<table class="table">
<tr>
<th>Date/time</th>
<th>Source</th>
<th>Event type</th>
<th>Value</th>
</tr>
<?
query = 'SELECT * FROM objectlog WHERE address=? ORDER BY id DESC LIMIT ?'
items = db:getall(query, obj.id, lines)
for _, item in ipairs(items) do
datetime = os.date('%c', item.logtime)
if item.src > 0 then
src = buslib.decodeia(item.src)
else
src = 'local'
end
if item.eventtype == 'write' then
value = busdatatype.decode(item.datahex, obj.datatype)
value = decodevalue(obj, value)
else
value = ''
end
?>
<tr>
<td><?=escape(datetime)?></td>
<td><?=escape(src)?></td>
<td><?=escape(item.eventtype)?></td>
<td><?=escape(value)?></td>
</tr>
<? end ?>
</table>
<script type="text/javascript">
var itemsdata = <? json.write(items) ?>;
//console.log(itemsdata);
</script>
</body>
</html>
]])
script.disable(_SCRIPTNAME)
Erwin