>D 40 IP=192.168.178.177 ;IP=192.168.178.49 SB=4096 ;benötigte zusätzliche defines für dieses script ;#define USE_TIMERS für Sonnenauf und Untergang ;#define USE_SCRIPT_WEB_DISPLAY für die Web Anzeige ;#define USE_GOOGLE_CHARTS für die Timeline ;#define MAXFILT 10 mehr Arrays für die Timeline ;#define MAX_GARRAY 7 für die 7 Tagesarrays bei der Timeline ; da das script nicht in den Standard Speicher einen 1M Flash Geräts passt ; nehmen wir die EEPROM Simulation mit 4096 Bytes script Speicher ; dieser Bereich wird aber bei jedem Softwareupdate OTA gelöscht, ; so dass das Script danach neu übertragen werden muss ;#define USE_EEPROM ;#define EEP_SCRIPT_SIZE 4096 ; in 4M Flash können wir besser die Einstellung ;#define USE_SCRIPT_FATFS -1 ;nehmen. Dazu brauchen wir ein anderes Linkerfile in platform_override.ini ;board_build.ldscript = ; statt eagle.flash.1m.ld ;nehmen wir eagle.flash.4m2m.ld ; time array für 20 Timer (je 3 elemente) ; Anzahl Timer mal 3 hier einsetzen, kann man hier vergrößern ; maximal 120 = 40 Timer M:tx=0 60 M:ta=0 60 M:so=0 10 M:mo=0 10 M:di=0 10 M:mi=0 10 M:do=0 10 M:fr=0 10 M:sa=0 10 res=0 cnt=0 tag=0 from=0 to=0 pw=0 p:enable=0 tdis=0 lpw=0 tmp=0 hr=0 min=0 once=0 pt=0 ps="" ; Anzahl relais hier eintragen nr=3 >B ; Timer Tabelle Einträge getrennt mit Doppelpunkt ; von, bis, ; 4 stellige Zeit oder ; -1 = Sonnenaufgang ; - 2 = Sonnenuntergang ; Tag, (Tag 1 = Sonntag) oder ; 10 = täglich ; 11 = Woche Mo-Fr ; 12 = Wochenende Sa,So ; Zufallszeit in Minuten ; relais 1..N =#ts("0830:2130:1:0:1") =#ts("1430:1630:2:0:1") =#ts("0930:1030:2:0:1") ;=#ts("-1:-2:3:0:1") =#ts("1430:1530:3:0:1") =#ts("1630:1830:4:0:1") =#ts("0900:1100:5:0:1") =#ts("1000:1410:6:0:1") =#ts("1200:1710:7:0:1") ; hier eventuell pulsetime und interlock einstellen ; beides nur bei 1 Minuten Intervallen sinnvoll ;->pulsetime 1 10 ;->pulsetime 2 10 ; Random Init rnd(-10) =#copytime ; Monate res=is1(0 "Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Okt|Nov|Dez|") ; Wochentage res=is(0 "So|Mo|Di|Mi|Do|Fr|Sa|") ; array aus string setzten #ts(ps) ; from tmp=st(ps : 1) from=int(tmp/100)*60+(tmp%100) ; to tmp=st(ps : 2) to=int(tmp/100)*60+(tmp%100) ; day + random time tmp=st(ps : 3) cnt=st(ps : 4) tag=tmp+(cnt/100) ; pin tmp=st(ps : 5) tag|=tmp*16 : in array schreiben tx=from tx=to tx=tag #copytime ; array kopieren und umrechnen so[0]=0 mo[0]=0 di[0]=0 mi[0]=0 do[0]=0 fr[0]=0 sa[0]=0 for cnt 1 tx[-1] 3 tag=tx[cnt+2] from=tx[cnt] to=tx[cnt+1] if from==-61 { from=sunrise } if from==-62 { from=sunset } if to==-61 { to=sunrise } if to==-62 { to=sunset } ; Zufallszeit einberechnen tmp=tag*100%100 if tmp>0 then from+=rnd(tmp)-(tmp/2) to+=rnd(tmp)-(tmp/2) endif ta[cnt]=from ta[cnt+1]=to ta[cnt+2]=int(tag) switch int(tag)&15 case 1 so=from so=to case 2 mo=from mo=to case 3 di=from di=to case 4 mi=from mi=to case 5 do=from do=to case 6 fr=from fr=to case 7 sa=from sa=to case 10 =#week =#wend case 11 =#week case 12 =#wend ends next #week mo=from mo=to di=from di=to mi=from mi=to do=from do=to fr=from fr=to #wend sa=from sa=to so=from so=to ; subroutine für Timer Tabelle #wsub ; nur in webmode 0 (Tabelle in der auch die Sensoren erscheinen) if wm==0 then ; Uhrzeit, Wochentag und Datum anzeigen wcs {s}

%2.0hours%:%2.0mins%:%2.0secs%

{m}%is[wday]% %0day%-%is1[month]%
%0year%{e} wcs {s}
Timerliste:
{e} ; timerliste anzeigen for cnt 1 ta[-1] 3 tag=ta[cnt+2]&15 if tag>0 then wcs {s}%0(cnt/3+1)% : if tag>=10 then switch tag case 10 wcs täglich case 11 wcs Mo-Fr case 12 wcs Sa/So ends else wcs %is[tag]% endif wcs => %2.0(int(ta[cnt]/60))%:%2.0(ta[cnt]%60)% - %2.0(int(ta[cnt+1]/60))%:%2.0(ta[cnt+1]%60)% tmp=int(ta[cnt+2])/16 wcs - r%0tmp% if tag==wday then wcs => heute{e} else wcs {e} endif endif next wcs {s}
{e} endif >P ; hier kommt er nur hin wenn power über webui oder mqtt ; geschaltet wurde ; verhindere timer bis nächstem Umschaltpunkt tdis=1 >S if once==0 and tinit>0 then =#copytime once=1 endif ;jede Minute min=mins if chg[min]>0 then ; testen ob ein Timer Übereinstimmung zeigt pw=0 pt=0 for cnt 1 ta[-1] 3 tag=ta[cnt+2]&15 pt=int(ta[cnt+2]/16) from=ta[cnt] to=ta[cnt+1] ;print %tag% %from% %to% if ((tag==wday) or (tag==10) or ((tag==11) and (wday>1) and (wday<7)) or ((tag==12) and ((wday==1) or (wday==7)))) then ;print >>> %tag% %from% %to% %pt% if time>=from and time0 ;then ; temporäre Sperrung abschalten ; muss eventuell pro relais gemacht werden tdis=0 if enable>0 and tdis==0 then ; Power setzen print %pw% tmp=1 for cnt 1 nr 1 if pw&tmp>0 then =>power%0cnt% 1 else =>power%0cnt% 0 endif print %pw% %tmp% tmp*=2 next endif ;endif ; um Mitternacht Zeiten neu anpassen hr=hours if chg[hr]>0 and hr==0 then =#copytime endif endif if chg[enable]>0{ svars } >W ; checkbox @ck(enable "Timer aktiviert ") ; trennlinie @
; subroutine zur Erzeugung der Tabelle %=#wsub $
;$gc(T so mo di mi do fr sa "So|Mo|Di|Mi|Do|Fr|Sa" "1|2|3|4|5|6|7") $gc(T so mo di mi do fr sa "So|Mo|Di|Mi|Do|Fr|Sa")