Posts: 36
Threads: 10
Joined: Sep 2021
Reputation:
0
Hello
Is it possible to display the operation time of an object (lamp, air conditioner) in minutes on screen . Thanks
Posts: 7764
Threads: 42
Joined: Jun 2015
Reputation:
447
Do you mean the time since the last ON command or the overall running time?
Posts: 36
Threads: 10
Joined: Sep 2021
Reputation:
0
(23.12.2021, 08:41)admin Wrote: Do you mean the time since the last ON command or the overall running time?
Hello
yes, the time since the last ON command . Thanks
Posts: 7764
Threads: 42
Joined: Jun 2015
Reputation:
447
You will need two scripts for this.
1. Event script mapped to control or status object if the load:
Code: value = event.getvalue()
key = 'ontime'
out = '32/1/5'
if value then
if not storage.get(key) then
storage.set(key, os.time())
grp.update(out, '0m')
end
else
storage.delete(key)
grp.update(out, '')
end
2. Scheduled script that runs every minute:
Code: key = 'ontime'
out = '32/1/5'
time = storage.get(key)
if time then
delta = os.time() - time
minutes = math.floor(delta / 60)
hours = math.floor(minutes / 60)
minutes = minutes % 60
if hours > 0 then
res = hours .. 'h '
else
res = ''
end
res = res .. minutes .. 'm'
grp.update(out, res)
end
32/1/5 is the object that shows the load ON time, set data type to 250 byte string. If you need multiple status outputs then use a unique storage key for each load ( ontime in this example).
Posts: 36
Threads: 10
Joined: Sep 2021
Reputation:
0
23.12.2021, 11:22
(This post was last modified: 23.12.2021, 11:39 by Nir70.)
(23.12.2021, 09:32)admin Wrote: You will need two scripts for this.
1. Event script mapped to control or status object if the load:
Code: value = event.getvalue()
key = 'ontime'
out = '32/1/5'
if value then
if not storage.get(key) then
storage.set(key, os.time())
grp.update(out, '0m')
end
else
storage.delete(key)
grp.update(out, '')
end
2. Scheduled script that runs every minute:
Code: key = 'ontime'
out = '32/1/5'
time = storage.get(key)
if time then
delta = os.time() - time
minutes = math.floor(delta / 60)
hours = math.floor(minutes / 60)
minutes = minutes % 60
if hours > 0 then
res = hours .. 'h '
else
res = ''
end
res = res .. minutes .. 'm'
grp.update(out, res)
end
32/1/5 is the object that shows the load ON time, set data type to 250 byte string. If you need multiple status outputs then use a unique storage key for each load (ontime in this example).
Small request Can I display seconds? Thanks
Posts: 7764
Threads: 42
Joined: Jun 2015
Reputation:
447
Yes, set display mode to value or icon/value.
Posts: 36
Threads: 10
Joined: Sep 2021
Reputation:
0
(23.12.2021, 11:46)admin Wrote: Yes, set display mode to value or icon/value.
Hello
It works, but it shows me the time only after shutdown ( send 0) , is it possible to view the time in real time?
Posts: 7764
Threads: 42
Joined: Jun 2015
Reputation:
447
The scheduled script should update the value each minute, check that it is set up correctly
Posts: 36
Threads: 10
Joined: Sep 2021
Reputation:
0
I checked does not update in real time, only I send a shutdown (0) it displays.
Posts: 7764
Threads: 42
Joined: Jun 2015
Reputation:
447
What is the data type of control object that is mapped to an event script?
Posts: 36
Threads: 10
Joined: Sep 2021
Reputation:
0
1 bit lamp, what do you mean?
Posts: 7764
Threads: 42
Joined: Jun 2015
Reputation:
447
1 bit is ok because it won't work correctly for non-Boolean values. Are you sure the value is not inverted because sending Off should put an empty string as the run-time value. Check if you have modified the scripts in any way.
Posts: 167
Threads: 20
Joined: Apr 2017
Reputation:
2
24.12.2021, 15:49
(This post was last modified: 24.12.2021, 15:52 by Dré.)
(23.12.2021, 12:30)admin Wrote: The scheduled script should update the value each minute, check that it is set up correctly
I tried this scipt too and use it now for 28 minutes and it is counting.
did you post the seconds script in a 'scheduled script' ?
Posts: 321
Threads: 72
Joined: Jan 2021
Reputation:
0
Thanks admin
The Script work fine for me and I add last run interval when value become false instead of nothing
Code: value = event.getvalue()
key = 'ontime'
out = '40/1/7'
if value then
if not storage.get(key) then
storage.set(key, os.time())
grp.update(out, '0m')
end
else
Last_Run = grp.getvalue(out)
time = os.date(' %a, %d/%m',time)
grp.update(out, 'Last Run: '..Last_Run..' In'..time)
storage.delete(key)
end
Best Regards,
Posts: 167
Threads: 20
Joined: Apr 2017
Reputation:
2
(23.12.2021, 09:32)admin Wrote: You will need two scripts for this.
1. Event script mapped to control or status object if the load:
Code: value = event.getvalue()
key = 'ontime'
out = '32/1/5'
if value then
if not storage.get(key) then
storage.set(key, os.time())
grp.update(out, '0m')
end
else
storage.delete(key)
grp.update(out, '')
end
2. Scheduled script that runs every minute:
Code: key = 'ontime'
out = '32/1/5'
time = storage.get(key)
if time then
delta = os.time() - time
minutes = math.floor(delta / 60)
hours = math.floor(minutes / 60)
minutes = minutes % 60
if hours > 0 then
res = hours .. 'h '
else
res = ''
end
res = res .. minutes .. 'm'
grp.update(out, res)
end
32/1/5 is the object that shows the load ON time, set data type to 250 byte string. If you need multiple status outputs then use a unique storage key for each load (ontime in this example).
I have a question, i try to use this script more times
i change the names value, key and out on both of the script on all places.
so both scripts use different names.
but if i trigger the seconds action, the first timer start for 0 again, some know what i do wrong?
my first event script for Laptop Table
Code: Laptop_Table = event.getvalue() --'0 WCD Woonkamer - laptoplader eettafel (tm)'
ontime_Laptop_Table = 'ontime'
output_Laptop_Table = '32/1/201' --'Laptop eettafel [timer on]'
if Laptop_Table then
if not storage.get(ontime_Laptop_Table) then
storage.set(ontime_Laptop_Table, os.time())
grp.update(output_Laptop_Table, '0 m')
end
else
storage.delete(ontime_Laptop_Table)
grp.update(output_Laptop_Table, '')
end
my first Resident script for Laptop Table
Code: ontime_Laptop_Table = 'ontime'
output_Laptop_Table = '32/1/201' --'Laptop eettafel [timer on]'
time = storage.get(ontime_Laptop_Table)
if time then
delta = os.time() - time
minutes = math.floor(delta / 60)
hours = math.floor(minutes / 60)
minutes = minutes % 60
if hours > 0 then
res = hours .. 'h '
else
res = ''
end
res = res .. minutes .. ' minuten'
grp.update(output_Laptop_Table, res)
end
my second event script for Kitchen
Code: Kitchen = grp.getvalue('1/4/4') --'0 Verl. Kitchen (tm)'
ontime_Kitchen = 'ontime'
output_Kitchen = '32/1/202' --'Kitchen [timer on]'
if Kitchen then
if not storage.get(ontime_Kitchen) then
storage.set(ontime_Kitchen, os.time())
grp.update(output_Kitchen, '0 m')
end
else
storage.delete(ontime_Kitchen)
grp.update(output_Kitchen, '')
end
my first Resident script for Kitchen
Code: ontime_Kitchen = 'ontime'
output_Kitchen = '32/1/202' --'Kitchen [timer on]'
time = storage.get(ontime_Kitchen)
if time then
delta = os.time() - time
minutes = math.floor(delta / 60)
hours = math.floor(minutes / 60)
minutes = minutes % 60
if hours > 0 then
res = hours .. 'h '
else
res = ''
end
res = res .. minutes2 .. ' minuten'
grp.update(output_Kitchen, res)
end
another thing,
for me it looks like line 1 and line 4 of the Resident script look like do the same thing, or m i wrong?
Posts: 36
Threads: 10
Joined: Sep 2021
Reputation:
0
Hello Thank you for the help It also works with the last time it was activated.
Posts: 7764
Threads: 42
Joined: Jun 2015
Reputation:
447
@Dré, you need to change the storage key ('ontime'), not the variable name:
Code: Kitchen = grp.getvalue('1/4/4') --'0 Verl. Kitchen (tm)'
ontime_Kitchen = 'ontime_kitchen'
output_Kitchen = '32/1/202' --'Kitchen [timer on]'
if Kitchen then
if not storage.get(ontime_Kitchen) then
storage.set(ontime_Kitchen, os.time())
grp.update(output_Kitchen, '0 m')
end
else
storage.delete(ontime_Kitchen)
grp.update(output_Kitchen, '')
end
Code: ontime_Kitchen = 'ontime_kitchen'
output_Kitchen = '32/1/202' --'Kitchen [timer on]'
time = storage.get(ontime_Kitchen)
if time then
delta = os.time() - time
minutes = math.floor(delta / 60)
hours = math.floor(minutes / 60)
minutes = minutes % 60
if hours > 0 then
res = hours .. 'h '
else
res = ''
end
res = res .. minutes2 .. ' minuten'
grp.update(output_Kitchen, res)
end
If using multiple timers you can combine the scheduled/resident scripts into one.
Posts: 167
Threads: 20
Joined: Apr 2017
Reputation:
2
28.12.2021, 12:34
(This post was last modified: 28.12.2021, 12:38 by Dré.)
Thanks Admin & khalil.
i update the script so i have now a time like '00:05' and i also use the last time actived, what Khalil added.
My updated Resident script, thanks for both of you, without i could't make it.
Code: ontime_Laptop_Table = 'ontime_Laptop_Table'
output_Laptop_Table = '32/1/201' --'Laptop tafel [timer on]'
time = storage.get(ontime_Laptop_Table)
if time then
delta = os.time() - time
minutes = math.floor(delta / 60)
hours = math.floor(minutes / 60)
minutes = minutes % 60
minutes = string.format("%02d", minutes)
if hours > 0 then
res = hours -- .. ': '
else
res = '00:'
end
hours = string.format("%02d", hours)
time_online = hours ..':'..minutes
grp.update(output_Laptop_Table, time_online)
end
Yes and i also can use now more timers of this.
Posts: 36
Threads: 10
Joined: Sep 2021
Reputation:
0
Hello
I noticed whan scrap is working. The processor is working hard, and the heat in the processor is rising a lot, is this a normal condition? Why is this happening? Best regards
Posts: 7764
Threads: 42
Joined: Jun 2015
Reputation:
447
Make sure you use a scheduled script that runs every minute not a resident script with low or 0 sleep time.
|