Téma: Monitorovaní různých stavu.
Tímto prográmkem ovládám vrata a monitoruju různé stavy teploty,pohybu vrat,tlak v darlingu.Při dosažení nastaveného limitu mi to pošle email v kterém mám nastaven filtr pro zasíláni SMS na mobil. Hodně jsem čerpal z tady uveřejněných kodů.Snad to někomu pomůže. Jsem totalni amater takže mne nekamenujte.
#define RELE_STATUS sys[231]
#define RELE_STATUSOFF sys[231]
#define OPTO0_STATUS sys[151]
#define OPTO0_STATUS1 sys[152]
#define OPTO0_STATUS2 sys[153]
#define RELE231 sys[231]
#define RELE232 sys[232]
var last_OPTO0_status;
var last_OPTO0_status1;
var last_OPTO0_status2;
var last_rele_status;
var last_rele_statusoff;
var sentEmail;
var sentEmail1;
var sentEmail2;
var sentEmail3;
var sentEmail3off;
var limit;
var limit1;
var email_odeslan;
var email_odeslan1;
var teplota;
var teplotavenku;
var odeslano;
var odeslano1;
//------------------------------------------------------------------------
init
{
odeslano = 0;
odeslano1 = 0;
}
//------------------------------------------------------------------------
relevrata
{
if (sentEmail3 == 0)
{
sentEmail3 = 1;
smtp_send('xxxxx@seznam.cz', 'Alarm', 'Pohyb vrat 1 !');
}
}
releaktiv
{
sentEmail3 = 0;
last_rele_status = RELE_STATUS;
if (RELE_STATUS != 0) relevrata();
}
//------------------------------------------------------------------------
relevrataoff
{
if (sentEmail3off == 0)
{
sentEmail3off = 1;
smtp_send('xxxxx@seznam.cz', 'Alarm', 'Pohyb vrat 0 !');
}
}
releaktivoff
{
sentEmail3off = 0;
last_rele_statusoff = RELE_STATUSOFF;
if (RELE_STATUSOFF != 1) relevrataoff();
}
//------------------------------------------------------------------------
sendOptoIsOff
{
if (sentEmail == 0)
{
sentEmail = 1;
smtp_send('xxxxx@seznam.cz', 'Alarm', 'Dosla voda ve studni !');
}
}
sendOptoIsOn
{
if (sentEmail1 == 0)
{
sentEmail1 = 1;
smtp_send('xxxxx@seznam.cz', 'Informace', 'Vrata otevrena 4x nebo WEB! !');
}
}
sendOptoIsOl
{
if (sentEmail2 == 0)
{
sentEmail2 = 1;
smtp_send('xxxxx@seznam.cz', 'Informace', 'INFO: Test tlacitko !');
}
}
OptoChanged
{
sentEmail = 0;
last_OPTO0_status = OPTO0_STATUS;
if (OPTO0_STATUS != 0) sendOptoIsOff();
}
OptoChanged1
{
sentEmail1 = 0;
last_OPTO0_status1 = OPTO0_STATUS1;
if (OPTO0_STATUS1 != 0) sendOptoIsOn();
}
OptoChanged2
{
sentEmail2 = 0;
last_OPTO0_status2 = OPTO0_STATUS2;
if (OPTO0_STATUS2 != 0) sendOptoIsOl();
}
teplota_ok
{
email_odeslan = 0;
}
teplota_ok1
{
email_odeslan1 = 0;
}
hlasim_prekroceno
{
if (email_odeslan == 0)
{
smtp_send('xxxxx@seznam.cz','Hlasim ze teplota ('teplota'°C) prekrocila 'limit'°C .');
email_odeslan = 1;
}
}
hlasim_prekroceno1
{
if (email_odeslan1 == 0)
{
smtp_send('xxxxx@seznam.cz','Hlasim ze teplota ('teplotavenku'°C) je mensi nez 'limit1'°C .');
email_odeslan1 = 1;
}
}
sepni_rele231
{
RELE231 = 1;
}
sepni_rele232
{
RELE232 = 1;
}
231
{
RELE231 = 0;
}
232
{
RELE232 = 0;
}
//------------------------------------------------------------------------
main
{
limit = 45;
limit1 = 27;
email_odeslan = 0;
email_odeslan1 = 0;
last_rele_status = RELE_STATUS;
last_rele_statusoff = RELE_STATUSOFF;
last_OPTO0_status = OPTO0_STATUS;
last_OPTO0_status1 = OPTO0_STATUS1;
last_OPTO0_status2 = OPTO0_STATUS2;
sentEmail = 0;
sentEmail1 = 0;
sentEmail2 = 0;
//------------------------------------------------------------------------
loop:
teplota = (sys[310] / 100);
if (teplota < limit) teplota_ok();
if (teplota > limit) hlasim_prekroceno();
teplotavenku = (sys[311] / 100);
if (teplotavenku > limit1) teplota_ok1();
if (teplotavenku < limit1) hlasim_prekroceno1();
if (0 < sys[140]) sepni_rele231() else 231();
if (0 < sys[141]) sepni_rele232() else 232();
if (last_rele_status != RELE_STATUS) releaktiv();
if (last_rele_statusoff != RELE_STATUSOFF) releaktivoff();
if (last_OPTO0_status != OPTO0_STATUS) OptoChanged();
if (last_OPTO0_status1 != OPTO0_STATUS1) OptoChanged1();
if (last_OPTO0_status2 != OPTO0_STATUS2) OptoChanged2();
goto loop;
}