Téma: Jednoduché spínačky s možností ručního ovládání
Už je to asi 24hod. co mám své první SDS-MICRO DIN E R1 zapnuté.
Napsal jsem svůj první prográmek, čerpajíce i ze zde uvedených návodů a postřehů.
Třeba se někomu bude hodit...
--
Martin
//
// Jednoduche spinaci hodiny pro 3 casova okna, pouze v pracovni dny
// Moznost rucniho trvaleho zapnuti, nebo vypnuti, nebo rizeni programem
// Uprava casu Letni/Zimni
// Nevyuzite RE1 (LED) slouzi jako blikatko - heartbeat :)
//
#define YER sys[7]
#define MON sys[6]
#define DAY sys[5]
#define HRS sys[8]
#define MIN sys[9]
#define SEC sys[10]
#define GMT sys[26]
#define RELE1 sys[231] //Jen pro blikatko
#define RELE2 sys[232] //Ovladani
#define MODE2 sys[140] // 1=trvale ON, 0=trvale OFF, jine=dle programu
// Mode se da ridit externe http://ipadresa/sdscep?p=0&sys140=2
#define TON 2 //Delka svitu blikatka
#define TOFF 8 //Delka zasnuti blikatka
var lc,zc,dow,con,coff,CAS,PON1,POF1,PON2,POF2,PON3,POF3;
//Uprava lokalniho casu podle datumu (Letni/Zimni)
summer
{
if (( MON > 3 ) && ( MON < 10 )) { GMT = 2; return; }
if (( MON < 3 ) || ( MON > 10 )) { GMT = 1; return; }
if ( MON == 3 )
{
lc = 31 - (( 5 * YER / 4 + 4 ) % 7 );
if ( DAY > lc ) { GMT = 2; return; }
if (( DAY == lc ) && ( HRS >= 2 )) { GMT = 2; }
}
if ( MON == 10 )
{
zc = 31 - (( 5 * YER / 4 + 1 ) % 7 );
if ( DAY > zc ) { GMT = 1; return; }
if (( DAY == zc ) && ( HRS >= 3 )) { GMT = 1; }
}
}
blikatko {
if (con<TON) {con+=1; RELE1=255; return;}
if (coff<TOFF && con==TON) {coff+=1;RELE1=0; return;}
if (coff==TOFF) {con=0; coff=0;}
}
ovladani {
if (MODE2==0) goto vypni; //trvale OFF dle MODE2
if (MODE2==1) goto zapni; //trvale ON dle MODE2
//Ostatni hodnoty MODE2 se berou jako automat
if (SEC!=0) goto stav; //Mimo 0. sec se jen vypise stav
dow=((sys[4] / 86400) + 4) % 7; //0=Ne,1=Po...6=So
if (dow==0 || dow==6) goto vypni; //Cely vikend je vypnuto
CAS=HRS*100+MIN; //udelame z casu cislo HHMM
if (CAS>=PON1 && CAS<=POF1) goto zapni;
if (CAS>=PON2 && CAS<=POF2) goto zapni;
if (CAS>=PON3 && CAS<=POF3) goto zapni;
//Pokud neni zadne casove okno splneno (viz vyse), tak vypnout.
label vypni:
if (RELE2!=0) {
echo ('Vypinam rele');
RELE2=0;
}
goto stav;
label zapni:
if (RELE2!=255) {
echo ('Zapinam rele');
RELE2=255;
}
goto stav;
label stav:
echoinline (HRS,':',MIN,':',SEC); //cas
if (RELE2==0) { echo (' Rele vypnuto.',RELE2); return;}
if (RELE2==255) { echo (' Rele zapnuto.',RELE2); return;}
}
//##################################################################
init
{
sys[196]=2;
sys[197]=2; // Obe rele ridi SDS-C
echo('Spinacky');
PON1=645; POF1=815; //ranni okno 6:45-8:15
PON2=1130; POF2=1300; //poledni okno
PON3=1430; POF3=1645; //odpoledni okno
MODE2=2; //Jedeme v auto modu, 1=trvale ON, 0=trvale OFF
}
//##################################################################
main
{
summer(); //korekce casu podle aktualniho datumu
echoclear(0); //smazeme konzolu
blikatko(); //blikame protoze zijeme
ovladani(); //ovlada rele podle casovych oken
}