Posts: 301 
	Threads: 39 
	Joined: Apr 2019
	
 Reputation: 
 4
	 
 
	
	
		Hello, 
 
I need to create a script that when '1/1/1' is "on" it starts a cyclic generator of time of 'on' and 'off' parameterizable. 
When '1/1/1' is Off, the cyclic generator is reset and the output is Off.
	 
	
	
	
		
	 
 
 
	
	
	
		
	Posts: 5287 
	Threads: 29 
	Joined: Aug 2017
	
 Reputation: 
 237
	 
 
	
	
		Hi 
Use event script on 1/1/1 to enable/disable a resident script which will send what you need.  
BR
	 
	
	
------------------------------ 
Ctrl+F5
 
	
		
	 
 
 
	
	
	
		
	Posts: 301 
	Threads: 39 
	Joined: Apr 2019
	
 Reputation: 
 4
	 
 
	
	
		 (24.08.2020, 07:10)Daniel. Wrote:  Hi 
Use event script on 1/1/1 to enable/disable a resident script which will send what you need.  
BR Thanks Daniel, you can provide me with an example that I did not find in the search engine, or help me with the script. 
1/1/1 - Activate sequence 
1/1/2 - Time value activated 
1/1/3 - Time value disabled 
1/1/4 - Output object
	  
	
	
	
		
	 
 
 
	
	
	
		
	Posts: 5287 
	Threads: 29 
	Joined: Aug 2017
	
 Reputation: 
 237
	 
 
	
	
		What does the tow objects: 
1/1/2 - Time value activated 
1/1/3 - Time value disabled 
Supposed to be doing?
	 
	
	
------------------------------ 
Ctrl+F5
 
	
		
	 
 
 
	
	
	
		
	Posts: 301 
	Threads: 39 
	Joined: Apr 2019
	
 Reputation: 
 4
	 
 
	
	
		 (24.08.2020, 10:50)Daniel. Wrote:  What does the tow objects: 
1/1/2 - Time value activated 
1/1/3 - Time value disabled 
Supposed to be doing? In these integer value objects, I enter a time in minutes.
 
I need to create a cyclic send of different on / off values. For example, 10 minutes on / 30 minutes off. This sequence is continuous while 1/1/1 is enabled, when changing everything is off.
	  
	
	
	
		
	 
 
 
	
	
	
		
	Posts: 5287 
	Threads: 29 
	Joined: Aug 2017
	
 Reputation: 
 237
	 
 
	
	
		Event script attached to 1/1/1 
Code: value = event.getvalue() 
 
if value then 
  script.enable('cycle_scriptname') 
else 
  script.disable('cycle_scriptname') 
end
 cycle_scriptname replace with a name of resident script. 
 
Resident script of interval 60s
 Code: timerOn = grp.getvalue('1/1/2') 
 
timerOff = grp.getvalue('1/1/3') 
 
onCounter = storage.get('onCounter', 0) 
offCounter = storage.get('offCounter', 0) 
 
 
onCounter = onCounter +1 
offCounter = offCounter +1 
log(onCounter,offCounter) 
 
if onCounter >= timerOn then 
  grp.write('1/1/4', true) 
  storage.set('onCounter', 0) 
else 
 
storage.set('onCounter', onCounter) 
 
end 
 
if offCounter >= timerOff then 
  grp.write('1/1/4', false) 
  storage.set('offCounter', 0) 
else 
  storage.set('offCounter', offCounter) 
end
 
BR
	  
	
	
------------------------------ 
Ctrl+F5
 
	
		
	 
 
 
	
	
	
		
	Posts: 301 
	Threads: 39 
	Joined: Apr 2019
	
 Reputation: 
 4
	 
 
	
		
		
		24.08.2020, 16:25 
(This post was last modified: 24.08.2020, 16:26 by davidchispas.)
		
	 
	
		Code: value = event.getvalue() 
 
if value then 
  script.enable('cycle_scriptname') 
else 
  script.disable('cycle_scriptname') 
end
  
Code: timerOn = grp.getvalue('1/1/2') 
 
timerOff = grp.getvalue('1/1/3') 
 
onCounter = storage.get('onCounter', 0) 
offCounter = storage.get('offCounter', 0) 
 
 
onCounter = onCounter +1 
offCounter = offCounter +1 
log(onCounter,offCounter) 
 
if onCounter >= timerOn then 
  grp.write('1/1/4', true) 
  storage.set('onCounter', 0) 
else 
 
storage.set('onCounter', onCounter) 
 
end 
 
if offCounter >= timerOff then 
  grp.write('1/1/4', false) 
  storage.set('offCounter', 0) 
else 
  storage.set('offCounter', offCounter) 
end
 
Thanks Daniel, I'm testing it but I can't get it to work properly. I have set 1 minute on and 2 minute off.
 
I have temporarily changed 1/1/4 to 0/5/3.
     
	 
	
	
	
		
	 
 
 
	
	
	
		
	Posts: 5287 
	Threads: 29 
	Joined: Aug 2017
	
 Reputation: 
 237
	 
 
	
	
		I left you the log which shows the counting for on and off.  For testing change the script interval to 10.  It will then run tomerOn x 10s instead of 60s. Make sure you change 1/1/4 in both places. 
  
Add to event script under else condition  
storage.set('offCounter', 0) 
storage.set('onCounter', 0) 
 
so the counter is rested after disabling it.
	
	
	
------------------------------ 
Ctrl+F5
 
	
		
	 
 
 
	
	
	
		
	Posts: 301 
	Threads: 39 
	Joined: Apr 2019
	
 Reputation: 
 4
	 
 
	
		
		
		25.08.2020, 09:07 
(This post was last modified: 25.08.2020, 13:32 by davidchispas.)
		
	 
	
		 (24.08.2020, 16:40)Daniel. Wrote:  I left you the log which shows the counting for on and off.  For testing change the script interval to 10.  It will then run tomerOn x 10s instead of 60s. Make sure you change 1/1/4 in both places. 
 
Add to event script under else condition  
storage.set('offCounter', 0) 
storage.set('onCounter', 0) 
 
so the counter is rested after disabling it. 
Hi Daniel, I had to modify in the resident script to send the opposite value for it to work correctly. 
if onCounter> = timerOn then 
  grp.write ('1/1/4', false) 
  storage.set ('onCounter', 0)
 
Anyway, I would like to thank you for your indications that have been of great help to me!     
In the end it has remained like that, I share it in case someone is of help.
 Code: AddressOutput = '1/1/4'  -- 01. 1 bit (boolean) 
 
StatusCounterOn = '1/1/5' --05. 1 byte unsigned integer 
 
StatusCounterOff = '1/1/6' --05. 1 byte unsigned integer 
 
CounterOn = 'onCounter_Test' 
 
CounterOff = 'offCounter_Test' 
 
Script = 'Test' 
 
 
---------------------------------------------------------------------------------- 
 
value = event.getvalue() 
 
if value then 
  script.enable(Script) 
else 
  script.disable(Script) 
  sleep(2) 
  grp.checkwrite(AddressOutput, false) 
  storage.set(CounterOn, 0) 
  storage.set(CounterOff, 0) 
  grp.checkwrite(StatusCounterOn, 0) 
  grp.checkwrite(StatusCounterOff, 0) 
--Opcional 
  sleep(2) 
  storage.delete(CounterOn) 
  storage.delete(CounterOff) 
end
  
Code: --Script resident (60s) 
 
AddressInput= '1/1/1' -- 01. 1 bit (boolean) 
 
timerOn = '1/1/2' --05. 1 byte unsigned integer 
 
timerOff = '1/1/3' --05. 1 byte unsigned integer 
 
AddressOutput= '1/1/4' -- 01. 1 bit (boolean) 
 
StatusCounterOn = '1/1/5' --05. 1 byte unsigned integer 
 
StatusCounterOff = '1/1/6' --05. 1 byte unsigned integer 
 
---------------------------------------------------------------------------- 
 
onCounter = storage.get('onCounter_' .. _SCRIPTNAME, 0) 
offCounter = storage.get('offCounter_' .. _SCRIPTNAME, 0) 
 
if grp.getvalue(AddressInput) and grp.getvalue(AddressOutput) then 
onCounter = onCounter +1 
end 
 
if grp.getvalue(AddressInput) and not grp.getvalue(AddressOutput) then 
offCounter = offCounter +1 
end 
 
log(onCounter,offCounter) 
 
if onCounter >= grp.getvalue(timerOn) then 
  grp.write(AddressOutput, false) 
  storage.set('onCounter_' .. _SCRIPTNAME, 0) 
else 
  storage.set('onCounter_' .. _SCRIPTNAME, onCounter) 
end 
 
if offCounter >= grp.getvalue(timerOff) then 
  grp.write(AddressOutput, true) 
  storage.set('offCounter_' .. _SCRIPTNAME, 0) 
else 
  storage.set('offCounter_' .. _SCRIPTNAME, offCounter) 
end 
   
grp.checkwrite(StatusCounterOn, onCounter) 
grp.checkwrite(StatusCounterOff, offCounter)
  
	 
	
	
	
		
	 
 
 
	 
 |