Téma: Spínací hodiny s jednoduchým ovládáním
Možná by se někomu mohly hodit jednoduché spínací hodiny.
Jsou ovládané přes SYS[140]-SYS[143] (relé 1) a SYS[144]-SYS[147] (relé 2), samozřejmě není problém upravit (bylo to kvůli jednoduchému zkoušení ze základního webového rozhraní).
V každé proměnné je umístěn "program" ve formě DHHMMhhmm, kde HH:MM je čas zapnutí, hh:mm čas vypnutí a D kód pro den (0-6=pondělí-neděle, 7=pracovní dny, 8=víkend a 9=každý den).
POZOR: Pro lepší kontrolu pracovních dnů používám kódování, kde 0=pondělí a 6=neděle...
Chceme-li například sepnout relé1 každý den ve 13:20 a vypnout ve 14:10, dáme do jedné z proměnných SYS[]-SYS[143] (libovolné) údaj 913201410.
Tady je kód procedury, kterou musíte pravidelně volat ve svém programu:
spinaci_hodiny {
var cas,on,off,dd,den;
if (sys[10]!=0) //spínáme jen v první vteřinu minuty
goto nespiname;
cas = sys[8] * 100 + sys[9]; //připravíme čas HHMM
den = ((sys[4] / 86400) + 3) % 7; //den v týdnu, 0=pondělí
//RE1
on = sys[140] / 10000; //rozebereme sys[140] HHMMHHMM (on/off)
off = sys[140] % 10000;
dd = on / 10000; //program pro den v týdnu ... 0-6=konkrétní den, 7=pracovní, 8=víkend, 9=každý den
on = on % 10000;
if (dd<7 && dd!=den)
goto test2;
if (dd==7 && den>4)
goto test2;
if (dd==8 && den<5)
goto test2;
//porovnáváme časy, pokud on=off (nebo 0), nic neděláme
if (cas==on && sys[231]==0 && on!=off) {
sys[231]=1;
echo('PRG1: RE1 zapnuto v ',sys[8],':',sys[9]);
}
if (cas==off && sys[231]!=0 && on!=off) {
sys[231]=0;
echo('PRG1: RE1 vypnuto v ',sys[8],':',sys[9]);
}
test2:
on = sys[141] / 10000; //rozebereme sys[141] HHMMHHMM (on/off)
off = sys[141] % 10000;
dd = on / 10000; //program pro den v týdnu ... 0-6=konkrétní den, 7=pracovní, 8=víkend, 9=každý den
on = on % 10000;
if (dd<7 && dd!=den)
goto test3;
if (dd==7 && den>4)
goto test3;
if (dd==8 && den<5)
goto test3;
//porovnáváme časy, pokud on=off (nebo 0), nic neděláme
if (cas==on && sys[231]==0 && on!=off) {
sys[231]=1;
echo('PRG2: RE1 zapnuto v ',sys[8],':',sys[9]);
}
if (cas==off && sys[231]!=0 && on!=off) {
sys[231]=0;
echo('PRG2: RE1 vypnuto v ',sys[8],':',sys[9]);
}
test3:
on = sys[142] / 10000; //rozebereme sys[142] HHMMHHMM (on/off)
off = sys[142] % 10000;
dd = on / 10000; //program pro den v týdnu ... 0-6=konkrétní den, 7=pracovní, 8=víkend, 9=každý den
on = on % 10000;
if (dd<7 && dd!=den)
goto test4;
if (dd==7 && den>4)
goto test4;
if (dd==8 && den<5)
goto test4;
//porovnáváme časy, pokud on=off (nebo 0), nic neděláme
if (cas==on && sys[231]==0 && on!=off) {
sys[231]=1;
echo('PRG3: RE1 zapnuto v ',sys[8],':',sys[9]);
}
if (cas==off && sys[231]!=0 && on!=off) {
sys[231]=0;
echo('PRG3: RE1 vypnuto v ',sys[8],':',sys[9]);
}
test4:
on = sys[143] / 10000; //rozebereme sys[143] HHMMHHMM (on/off)
off = sys[143] % 10000;
dd = on / 10000; //program pro den v týdnu ... 0-6=konkrétní den, 7=pracovní, 8=víkend, 9=každý den
on = on % 10000;
if (dd<7 && dd!=den)
goto test5;
if (dd==7 && den>4)
goto test5;
if (dd==8 && den<5)
goto test5;
//porovnáváme časy, pokud on=off (nebo 0), nic neděláme
if (cas==on && sys[231]==0 && on!=off) {
sys[231]=1;
echo('PRG4: RE1 zapnuto v ',sys[8],':',sys[9]);
}
if (cas==off && sys[231]!=0 && on!=off) {
sys[231]=0;
echo('PRG4: RE1 vypnuto v ',sys[8],':',sys[9]);
}
test5:
//RE2
on = sys[144] / 10000; //rozebereme sys[144] HHMMHHMM (on/off)
off = sys[144] % 10000;
dd = on / 10000; //program pro den v týdnu ... 0-6=konkrétní den, 7=pracovní, 8=víkend, 9=každý den
on = on % 10000;
if (dd<7 && dd!=den)
goto test6;
if (dd==7 && den>4)
goto test6;
if (dd==8 && den<5)
goto test6;
//porovnáváme časy, pokud on=off (nebo 0), nic neděláme
if (cas==on && sys[232]==0 && on!=off) {
sys[232]=1;
echo('PRG5: RE2 zapnuto v ',sys[8],':',sys[9]);
}
if (cas==off && sys[232]!=0 && on!=off) {
sys[232]=0;
echo('PRG5: RE2 vypnuto v ',sys[8],':',sys[9]);
}
test6:
on = sys[145] / 10000; //rozebereme sys[145] HHMMHHMM (on/off)
off = sys[145] % 10000;
dd = on / 10000; //program pro den v týdnu ... 0-6=konkrétní den, 7=pracovní, 8=víkend, 9=každý den
on = on % 10000;
if (dd<7 && dd!=den)
goto test7;
if (dd==7 && den>4)
goto test7;
if (dd==8 && den<5)
goto test7;
//porovnáváme časy, pokud on=off (nebo 0), nic neděláme
if (cas==on && sys[232]==0 && on!=off) {
sys[232]=1;
echo('PRG6: RE2 zapnuto v ',sys[8],':',sys[9]);
}
if (cas==off && sys[232]!=0 && on!=off) {
sys[232]=0;
echo('PRG6: RE2 vypnuto v ',sys[8],':',sys[9]);
}
test7:
on = sys[146] / 10000; //rozebereme sys[146] HHMMHHMM (on/off)
off = sys[146] % 10000;
dd = on / 10000; //program pro den v týdnu ... 0-6=konkrétní den, 7=pracovní, 8=víkend, 9=každý den
on = on % 10000;
if (dd<7 && dd!=den)
goto test8;
if (dd==7 && den>4)
goto test8;
if (dd==8 && den<5)
goto test8;
//porovnáváme časy, pokud on=off (nebo 0), nic neděláme
if (cas==on && sys[232]==0 && on!=off) {
sys[232]=1;
echo('PRG7: RE2 zapnuto v ',sys[8],':',sys[9]);
}
if (cas==off && sys[232]!=0 && on!=off) {
sys[232]=0;
echo('PRG7: RE2 vypnuto v ',sys[8],':',sys[9]);
}
test8:
on = sys[147] / 10000; //rozebereme sys[147] HHMMHHMM (on/off)
off = sys[147] % 10000;
dd = on / 10000; //program pro den v týdnu ... 0-6=konkrétní den, 7=pracovní, 8=víkend, 9=každý den
on = on % 10000;
if (dd<7 && dd!=den)
goto nespiname;
if (dd==7 && den>4)
goto nespiname;
if (dd==8 && den<5)
goto nespiname;
//porovnáváme časy, pokud on=off (nebo 0), nic neděláme
if (cas==on && sys[232]==0 && on!=off) {
sys[232]=1;
echo('PRG8: RE2 zapnuto v ',sys[8],':',sys[9]);
}
if (cas==off && sys[232]!=0 && on!=off) {
sys[232]=0;
echo('PRG8: RE2 vypnuto v ',sys[8],':',sys[9]);
}
nespiname:
}