Posts: 40 
	Threads: 11 
	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: 8422 
	Threads: 45 
	Joined: Jun 2015
	
 Reputation: 
 481
	 
 
	
	
		Do you mean the time since the last ON command or the overall running time?
	 
	
	
	
		
	 
 
 
	
	
	
		
	Posts: 40 
	Threads: 11 
	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: 8422 
	Threads: 45 
	Joined: Jun 2015
	
 Reputation: 
 481
	 
 
	
	
		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: 40 
	Threads: 11 
	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: 8422 
	Threads: 45 
	Joined: Jun 2015
	
 Reputation: 
 481
	 
 
	
	
		Yes, set display mode to value or icon/value.
	 
	
	
	
		
	 
 
 
	
	
	
		
	Posts: 40 
	Threads: 11 
	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: 8422 
	Threads: 45 
	Joined: Jun 2015
	
 Reputation: 
 481
	 
 
	
	
		The scheduled script should update the value each minute, check that it is set up correctly
	 
	
	
	
		
	 
 
 
	
	
	
		
	Posts: 40 
	Threads: 11 
	Joined: Sep 2021
	
 Reputation: 
 0
	 
 
	
	
		I checked does not update in real time, only I send a shutdown (0) it displays.
	 
	
	
	
		
	 
 
 
	
	
	
		
	Posts: 8422 
	Threads: 45 
	Joined: Jun 2015
	
 Reputation: 
 481
	 
 
	
	
		What is the data type of control object that is mapped to an event script?
	 
	
	
	
		
	 
 
 
	
	
	
		
	Posts: 40 
	Threads: 11 
	Joined: Sep 2021
	
 Reputation: 
 0
	 
 
	
	
		1 bit lamp, what do you mean?
	 
	
	
	
		
	 
 
 
	
	
	
		
	Posts: 8422 
	Threads: 45 
	Joined: Jun 2015
	
 Reputation: 
 481
	 
 
	
	
		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: 347 
	Threads: 79 
	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: 40 
	Threads: 11 
	Joined: Sep 2021
	
 Reputation: 
 0
	 
 
	
	
		Hello Thank you for the help It also works with the last time it was activated.   
	 
	
	
	
		
	 
 
 
	
	
	
		
	Posts: 8422 
	Threads: 45 
	Joined: Jun 2015
	
 Reputation: 
 481
	 
 
	
	
		@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: 40 
	Threads: 11 
	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: 8422 
	Threads: 45 
	Joined: Jun 2015
	
 Reputation: 
 481
	 
 
	
	
		Make sure you use a scheduled script that runs every minute not a resident script with low or 0 sleep time.
	 
	
	
	
		
	 
 
 
	 
 |