i have build a rule-set for a Shelly 2.5 to control a roller blind.
Maybe this is interessting for somebody.
DeviceConfig: rules1.txt:
Code: Select all
// TaskVar 12: name=control
// Var1: name=state
// Stopped 0
// RunningUp 1
// RunningDown 2
// Initializing 4
//
// Var2: name=limit
// Seconds run: 3-20
//
// Var3: name=current
// CurrentSec: 0=Rollo oben ; Var2=Rollo unten
//
// Var4: name=target
// GPIO 4 = up relais name=relais1up
// GPIO 15 = down relais name=relais2down
// sw1down
// sw2up
// Timer7 = 1sec timer on up mode
// Timer8 = 1sec timer on down mode
on System#Boot do
event SystemInit
endon
on SystemInit do
// Setting the roller blind run time (in sec)
TaskValueSet 12,2,10
// #####################################################################
event StopRunning //ensure, all is stoped
TaskValueSet,12,1,4 // start init procedure
TaskValueSet 12,3,[control#limit]
TaskValueSet 12,4,0
event InitUp //ensure blind is open afer powerswitch/boot
endon
//######################################################################
Code: Select all
on sw1up#state=1 do
if [control#state] <> 4 // on init, switches are not working
if [control#state] <> 0
event StopRunning
else
TaskValueSet,12,4,0
if [control#current] > [control#target]
event RunningUp
endif
endif
endif
endon
on sw2down#state=1 do
if [control#state] <> 4 // on init, switches are not working
if [control#state] <> 0
event StopRunning
else
TaskValueSet,12,4,[control#limit]
if [control#current] < [control#target]
event RunningDown
endif
endif
endif
endon
on StopRunning do // stopping a posible running up or down move
timerSet,7,0
timerSet,8,0
TaskValueSet,12,1,0
gpio,4,0
gpio,15,0
endon
on RunningDown do
TaskValueSet,12,1,2
gpio,4,0 // ensure up is off
gpio,15,1 // activeate Down
timerSet,7,0
timerSet,8,1
endon
on RunningUp do
TaskValueSet,12,1,1
gpio,15,0 // ensure down is off
gpio,4,1 // activeate Up
timerSet,8,0
timerSet,7,1
endon
on InitUp do
gpio,15,0 // ensure down is off
gpio,4,1 // activeate Up
timerSet,8,0
timerSet,7,1
endon
On Rules#Timer=8 do // Handle 1sec steps on blind up
TaskValueSet 12,3,[control#current]+1
if [control#current] >= [control#target]
timerSet,8,0
event StopRunning
else
timerSet,8,1
endif
endon
On Rules#Timer=7 do // Handle 1sec steps on blind up
TaskValueSet 12,3,[control#current]-1
if [control#current] <= [control#target]
timerSet,7,0
event StopRunning
else
timerSet,7,1
endif
endon
Code: Select all
// Remote Interface:
// =================
// http://<espeasyip>/control?cmd=event,RunTo=5 = 5 seconds from open
// http://<espeasyip>/control?cmd=event,RunTo=2 = 2 seconds from open
// http://<espeasyip>/control?cmd=event,RunTo=100 total close
// http://<espeasyip>/control?cmd=event,RunTo=0 total open
// http://<espeasyip>/control?cmd=event,RunToClose total close
// http://<espeasyip>/control?cmd=event,RunToOpen total open
//
// State-Informations from control device
on RunToClose do
if [control#state] <> 4 // on init, no remote commands are allowed
TaskValueSet,12,4,[control#limit]
event RunningDown
endif
endon
on RunToOpen do
if [control#state] <> 4 // on init, no remote commands are allowed
TaskValueSet,12,4,0
event RunningUp
endif
endon
on RunTo do
if [control#state] <> 4 // on init, no remote commands are allowed
if [control#limit] < %eventvalue%
TaskValueSet,12,4,[control#limit]
else
if %eventvalue% < 0
TaskValueSet,12,4,0
else
TaskValueSet,12,4,%eventvalue%
endif
endif
if [control#current] > %eventvalue%
event RunningUp
else
if [control#current] < %eventvalue%
event RunningDown
endif
endif
endif
endon
//######################################################################