The event-rule 'VentilSchalten' (without the current comments) switch my valves on or off. The event-commands like 'Event,VentilSchalten=1,1' works as I expect.
The event-rule 'AutoPrgStartStop' should start the program 1-3 (Task 9 Value 1), with different segment-sequences (Task 9 Value 2). Tested, seems to work like I planned.
The event-rule 'AutoPrgWeiter' should switch to the next segment. Test looks good.
But If the event 'AutoPrgWeiter' trigger the event 'VentilSchalten' with the two needed parameters (e.g. VertilSchalten=1,1) and the event 'VentilSchalten' has all source code activated, the ESP reboot with a reason 'Software Watchdog'. But it work, If I comment all and do only a Let with the two eventvalues.
Can someone have a look to it ? Maybe a problem with the stack of the eventvalues ? In a simple test nested event-rules work at least to deep to three event-rules.
Here is the device-configuration: rules1.txt:
Code: Select all
on System#Boot do
PcfGpio,1,0 // Ventil1
PcfGpio,2,0 // Ventil2
PcfGpio,3,0 // Ventil3
PcfGpio,4,0 // Ventil4
PcfGpio,5,0 // Ventil5
PcfGpio,6,0 // Ventil6
Gpio,13,0 // Relais 12V Versorgung
if [Zeiten1#Dauer1]=0
TaskValueSet,7,1,15
endif
if [Zeiten1#Dauer2]=0
TaskValueSet,7,2,10
endif
if [Zeiten1#Dauer3]=0
TaskValueSet,7,3,15
endif
if [Zeiten1#Dauer4]=0
TaskValueSet,7,4,10
endif
if [Zeiten2#Dauer5]=0
TaskValueSet,8,1,10
endif
if [Zeiten2#Dauer6]=0
TaskValueSet,8,2,8
endif
if [Zeiten2#Anpassung]=0
TaskValueSet,8,3,1
endif
endon
on MQTT#Connected do
Event,Statusabfrage
endon
on Statusabfrage do
Publish,/%sysname%/status/LWT,Connected
Publish,/%sysname%/Ventil1/Status,[Ventil1#Status]
Publish,/%sysname%/Ventil2/Status,[Ventil2#Status]
Publish,/%sysname%/Ventil3/Status,[Ventil3#Status]
Publish,/%sysname%/Ventil4/Status,[Ventil4#Status]
Publish,/%sysname%/Ventil5/Status,[Ventil5#Status]
Publish,/%sysname%/Ventil6/Status,[Ventil6#Status]
endon
Code: Select all
on VentilSchalten do
Let,%eventvalue1%,%eventvalue2%
// Event,PumpeUndNT=%eventvalue2%
PcfGpio,%eventvalue1%,%eventvalue2%
// if %eventvalue1%>0 and %eventvalue1%<5
// Let,7,[Zeiten1#Dauer%eventvalue1%]*[Zeiten2#Anpassung]*60
// endif
// if %eventvalue1%>4 and %eventvalue1%<7
// Let,7,[Zeiten2#Dauer%eventvalue1%]*[Zeiten2#Anpassung]*60
// endif
// if %eventvalue2%=1
// Timerset,%eventvalue1%,[INT#7]
// else
// Timerset,%eventvalue1%,0
// Let,7,0
// endif
endon
on Rules#Timer do
if %eventvalue%<7
Let,%eventvalue%,0
Let,7,0
PcfGpio,%eventvalue%,0
Event,AutoPrgWeiter
Event,PumpeUndNT=0
endif
endon
on PumpeUndNT do
if %eventvalue1%=1
Publish,/SW011/cmd,"event,Schalten=1"
Gpio,13,1
else
if [VAR#1]=0 and [VAR#2]=0 and [VAR#3]=0 and [VAR#4]=0 and [VAR#5]=0 and [VAR#6]=0
Publish,/SW011/cmd,"event,Schalten=0"
Gpio,13,0
endif
endif
endon
Code: Select all
on AutoPrgStartStop do
if %eventvalue1%<=0 and [Programm#lfdPrg]>0
if [VAR#8]<>0
TaskValueSet,8,3,[VAR#8] // Wiederherstellung alte Anpassung
Let,8,0
endif
TaskValueSet,9,1,0
if %eventvalue2%>0 and %eventvalue2%<=1
TaskValueSet,8,3,%eventvalue2%
endif
Event,AutoPrgWeiter
else
if %eventvalue2%>0 and %eventvalue2%<=1
if [Zeiten2#Anpassung]<>%eventvalue2%
Let,8,[Zeiten2#Anpassung] // für Wiederherstellung merken
TaskValueSet,8,3,%eventvalue2%
endif
endif
if %eventvalue1%>0
if [Programm#lfdPrg]<>%eventvalue1%
TaskValueSet,9,1,%eventvalue1%
Event,AutoPrgWeiter
endif
else
if [Programm#lfdPrg]<>1
TaskValueSet,9,1,1
Event,AutoPrgWeiter
endif
endif
endif
endon
on AutoPrgWeiter do
if [Programm#lfdPrg]=0
if [Programm#aktSeg]<>0
Event,VentilSchalten=[Programm#aktSeg],0
LogEntry,"Ventil [Programm#aktSeg] geschlossen"
TaskValueSet,9,2,0
endif
LogEntry,"Programm gestoppt"
else
if [Programm#aktSeg]<>0
Event,VentilSchalten=[Programm#aktSeg],0
LogEntry,"Ventil [Programm#aktSeg] geschlossen"
endif
if [Programm#lfdPrg]=1
Let,9,[Programm#aktSeg]+1
endif
if [Programm#lfdPrg]=2 or [Programm#lfdPrg]=3
if [Programm#aktSeg]=0
Let,9,1
else
Let,9,[Programm#aktSeg]+2
endif
if [Programm#lfdPrg]=3 and [INT#9]=7
Let,9,[INT#9]-1
endif
endif
if [INT#9]>6
TaskValueSet,9,1,0
Event,AutoPrgWeiter
else
TaskValueSet,9,2,[INT#9]
Event,VentilSchalten=[INT#9],1
LogEntry,"Programm [Programm#lfdPrg]/Ventil [Programm#aktSeg] geöffnet"
endif
Let,9,0
endif
endon