//deklaracia premennych
var doba_behu; //ako dlho bezi program od posledneho restaru
var count_err_com; //pocitadlo neprenesenych paketov
var ping_seq; //sekvencia pre ping
var doba; //premenna pre ping
var vlhko;
var teplo;
var tlako;
var den;
var mes;
var rok;
var hod;
var min;
var sek;
var teplota;
var limit;
var hystereze;
var email_odeslan;
init
{
//zakladni nastaveni
limit=2300; //teplota *100 - cili 23st
hystereze=50; //teplota *100 - cili 0.5st
email_odeslan=0;
echoclear();
}
odosli //rutina pre odoslanie dat na web
{
//nacitanie hodnot
vlhko = sys[431];
tlako = sys[433];
count_err_com = sys[144]; //nacitanie poctu chyb
//teplo = sys[310];
label pockaj:
if (sys[350] == 2) //stav cidla teploty ok
{
teplo = sys[310];
}
else //cidlo teploty nie je v stave ready
{
goto pockaj;
}
//nacitanie premennych datumu a casu
doba_behu = sys[3];
den = sys[5];
mes = sys[6];
rok = sys[7];
hod = sys[8];
min = sys[9];
sek = sys[10];
//spustim rucne IP (ziskane rucne) za xxx doplnit IP adresu a za domena doplnit vlastnu domenu
//nazvy premennych tempV a humV je nutne dodrzat!!! Su pouzite v programe index.php
//http_get(xxx,xxx,xxx,xxx,'domena.sk','/adresar/index.php?tempV=',teplo,'&humV=',vlhko,'&pressV=',tlako);
wait(5000);
//ak má server problém:
if ((sys[65] != 1024)||(sys[75] != 200)) //server nie je schopny prijat data
{
goto chyba_www_serveru;
}
//nie je problem, takze ok a toto vypise na konzole
echo(sys[5],'.',sys[6],'.',sys[7],' - ',sys[8],':',sys[9],':',sys[10],' Data odoslane - OK. Doba behu = ',doba_behu,' Chyby comm. = ',count_err_com,' P = ',tlako,' T = ',teplo,' H = ',vlhko);
//vsetko hotovo
return;
label chyba_www_serveru:
//obsluha chyby - www server
count_err_com++ ; //pripocita 1 k hodnote chyb
sys[144] = count_err_com; //zapis poctu chyb do pamate
//vypis na konzolu so stavovym kodom
echo(sys[5],'.',sys[6],'.',sys[7],' - ',sys[8],':',sys[9],':',sys[10],' Chyba komunikacie s www serverom, http: ', sys[75]);
return;
}
mam_1_min
{
//toto je zavolane vzdy v prvej sekunde, odoslem data na web, presne kazdu minutu
odosli();
}
teplota_ok
{
sys[231] = 0; //RELE1 vypnuto
email_odeslan = 0; //povolime odeslani emailu pri pristim prekroceni limitu
}
hlasim_prekroceno
{
//pokud jsem uz odeslal email, nebudu ho posilat znovu
if (email_odeslan == 0)
{
//jeste jsem email neodeslal, takze...
smtp_send('muj@email.cz','Kotel odstaven!!!', 'Akumulacky jsou nabite!!!');
echo(sys[5],'.',sys[6],'.',sys[7],' - ',sys[8],':',sys[9],':',sys[10],' Alarm odstaveni odeslany.'); //vypis na konzolu
//a zapamatuji si odeslani
email_odeslan = 1;
}
sys[231] = 255; //RELE1 zapnuto
}
main
{
sys[144] = 0;
echo(' Start programu OK. '); //vypis na konzolu
//pockam 1 sekundu na rozbehnutie systemu
wait(1000);
label pingam: //kontrola dostupnosti vlastneho routeru
ping_seq++;
ping(192,168,2,1,ping_seq); //IP routera v pripade potreby zmenit
doba = sys[4];
cakacia_slucka:
//uz uplynulo 500 msec?
if (sys[4] - doba > 500) goto pingam;
//uz prisla odpoved?
if (sys[92] != 8) goto cakacia_slucka;
echo (' Ping na router OK'); //vypis na konzolu
label cakam_cas:
if (sys[7] == 1970) //kontrola, ci uz je z NTP nacitany spravny datum a cas
{
echo (' Cakam na presny cas...'); //vypis na konzolu
wait(1000);
goto cakam_cas;
}
else
{
echo(sys[5],'.',sys[6],'.',sys[7],' - ',sys[8],':',sys[9],':',sys[10],' Presny cas OK. '); //vypis na konzolu
}
// poslat email pri zapnuti - po vypadku a znovuzapnuti napajania
smtp_send('adresa@domena.sk', 'Vypadok el. energie a meteostanice', 'Po vypadku je znova zapnuta dodavka elektrickej energie dna ',sys[5],'.',sys[6],'.',sys[7],' o ',sys[8],':',sys[9],':',sys[10],' hod.');
echo(sys[5],'.',sys[6],'.',sys[7],' - ',sys[8],':',sys[9],':',sys[10],' Email bol odoslany.'); //vypis na konzolu
wait(1000);
label opakovat:
//pockam na patnastu sekundu v minute - nedoporucujem posielat v nultej sekunde, cas servera nemusi byt spravne nastaveny!
if (sys[10] == 15) mam_1_min();
//kontrola na teplotu a pripadne odeslani emailu
teplota = sys[311]; //zadne deleni pracujeme s integery
if (teplota < limit - hystereze) teplota_ok();
if (teplota > limit) hlasim_prekroceno();
wait(500);
goto opakovat;
}