Hi,
I have two EmailRelay in the same program, one to email out 24 hours data everyday in the morning 08:00am and other EmailRelay to send out an alert for low battery voltage. The alert is working fine but for 24 hours data email was received at 08:00am and the attached data was starting from 00:15 to 00:00. I wanted the data to be from 08:15 to 08:00. I added RealTime for this.
'''The 'Interval' values will be numerical. The available 'Unit' values are: Sec, Min, Hr, Day
'''Scanning interval
Const Interval = 15
Const Unit = Min
'''The 'batt_ALERT' values will be numerical.
Const batt_ALERT = 13.4
''''-------------------------------------------------------------------------
''''-------------------------------------------------------------------------
''''EmailRelay() constants for battery alert
Const EMAIL_ATTACHMENT_ALERT = ""
Const EMAIL_SUBJECT_ALERT = "Logger Battery ALERT"
Const EMAIL_TO_ADDRESS_ALERT = "email@email.com"
'''EmailRealy() variables for battery alert
Public email_message_ALERT As String * 300
Public email_trigger_ALERT As Boolean
Public email_tx_success_ALERT
Public email_ServerResp_ALERT
'''EmailRelay() constants for email readings
Const EMAIL_ATTACHMENT = "TEMP"
Const EMAIL_SUBJECT = "Logger Readings"
Const EMAIL_TO_ADDRESS = "email@email.com"
Const CR_LF = CHR(13) & CHR(10)
''''EmailRealy() variables for email readings
Const email_message = "Logger Readings"
Public email_trigger As Boolean
Public email_tx_success
Public email_ServerResp
Public PTemp, batt_volt, T107_C
Public rTime(9)
'Alias rTime(1) = Year 'assign the alias Year to rTime(1)
'Alias rTime(2) = Month 'assign the alias Month to rTime(2)
'Alias rTime(3) = DOM 'assign the alias DOM to rTime(3)
Alias rTime(4) = Hour 'assign the alias Hour to rTime(4)
Alias rTime(5) = Minute 'assign the alias Minute to rTime(5)
'Alias rTime(6) = Second 'assign the alias Second to rTime(6)
'Alias rTime(7) = uSecond 'assign the alias uSecond to rTime(7)
DataTable (TEMP,1,-1)
Sample (1,batt_volt,FP2)
Sample (1,PTemp,FP2)
Average (1,T107_C,FP2,0)
Sample (1,Hour,IEEE4) 'place Hour in VALUES table
Sample (1,Minute,IEEE4) 'place Minute in VALUES table
EndTable
BeginProg
Scan (Interval,Unit,0,0)'Scan every 15 minute
PanelTemp (PTemp,250)
Battery (batt_volt)
RealTime( rTime )
Therm107 (T107_C,1,3,Vx1,0,_60Hz,1.0,0)
CallTable TEMP
''''Check battery voltage
If batt_volt < batt_ALERT Then
email_trigger_ALERT = True
EndIf
''''Check Time
If rTime(4) = 8 AND rTime(5) = 0 Then
email_trigger = True
EndIf
NextScan
SlowSequence
Do
'''Email data
If email_trigger = True Then
email_trigger = False '''reset my trigger
email_tx_success = EmailRelay (EMAIL_TO_ADDRESS,EMAIL_SUBJECT,email_message,email_ServerResp,EMAIL_ATTACHMENT,0,24,Hr,8)
EndIf
''''Email battery voltage alert
If email_trigger_ALERT = True Then
email_trigger_ALERT = False '''reset my trigger
email_message_ALERT = "Warning!" & CR_LF & CR_LF
email_message_ALERT = email_message_ALERT & "This is a automatic email message from the datalogger station " & Status.StationName & ". "
email_message_ALERT = email_message_ALERT & "An alarm condition has been identified." & CR_LF
email_message_ALERT = email_message_ALERT & "The battery voltage is " & batt_volt + " volts." & CR_LF
email_message_ALERT = email_message_ALERT & "Datalogger time is " & Status.Timestamp
email_tx_success_ALERT = EmailRelay (EMAIL_TO_ADDRESS_ALERT,EMAIL_SUBJECT_ALERT,email_message_ALERT,email_ServerResp_ALERT,EMAIL_ATTACHMENT_ALERT)
EndIf
Loop
EndProg
Thanks,
TLT
Hello TLT,
I have modified your code to get data log by email with EmailRelay at the required time with "IfTime" instruction.
I have inserted some comments so that you can continue adapting it to your requirements.
'CR1000 Series Datalogger
'Declare Public Variables
Public PTemp, batt_volt, T107_C
'''EmailRealy() variables for battery alert
Public email_message_ALERT As String * 300
Public email_trigger_ALERT As Boolean
Public email_tx_success_ALERT
Public email_ServerResp_ALERT
''''EmailRealy() variables for email readings
Public email_trigger As Boolean
Public email_tx_success
Public email_ServerResp
'Declare Constants
'''Set the time interval for storage data in table
Const Interval = 15
Const Unit = Min
'''The 'batt_ALERT' values will be numerical.
Const batt_ALERT = 12.0
''''EmailRelay() constants for battery alert
Const EMAIL_ATTACHMENT_ALERT = ""
Const EMAIL_SUBJECT_ALERT = "Logger Battery ALERT"
Const EMAIL_TO_ADDRESS_ALERT = "email@email.com"
'''EmailRelay() constants for email readings
Const EMAIL_ATTACHMENT = "TEMP"
Const EMAIL_SUBJECT = "Logger Readings"
Const EMAIL_TO_ADDRESS = "email@email.com"
Const CR_LF = CHR(13) & CHR(10)
''''EmailRealy() const for email readings
Const email_message = "Logger Readings"
'Define Data Tables.
DataTable (TEMP,1,-1)
DataInterval (0,Interval,Unit,10)'Save data every 15 minute
Sample (1,batt_volt,FP2)
Sample (1,PTemp,FP2)
Average (1,T107_C,FP2,0)
EndTable
'MAIN PROGRAM+++
BeginProg
Scan (1,sec,3,0)
PanelTemp (PTemp,250)
Battery (batt_volt)
Therm107 (T107_C,1,3,Vx1,0,_60Hz,1.0,0)
'Enter other measurement instructions
'Call Output Tables
CallTable TEMP
NextScan
SlowSequence
Do
'''Email data
'Use IfTime (481,1440,Min) in minutes to indicate the time of the data sending at 08:01 hours.
'Also considered a trigger with a boolean in public values
If email_trigger = True OR IfTime (481,1440,Min) Then
email_tx_success = EmailRelay (EMAIL_TO_ADDRESS,EMAIL_SUBJECT,email_message,email_ServerResp,EMAIL_ATTACHMENT,0,-24,Hr,8)
email_trigger = False '''reset my trigger
EndIf
Loop
SlowSequence
'Use Scan to define the alert notification frequency, considering that the battery voltage below the alert level will always be low at all times.
Scan (01,Hr,2,0)
''''Email battery voltage alert
If batt_volt < batt_ALERT OR email_trigger_ALERT = True Then
email_message_ALERT = "Warning!" & CR_LF & CR_LF
email_message_ALERT = email_message_ALERT & "This is a automatic email message from the datalogger station " & Status.StationName & ". "
email_message_ALERT = email_message_ALERT & "An alarm condition has been identified." & CR_LF
email_message_ALERT = email_message_ALERT & "The battery voltage is " & batt_volt + " volts." & CR_LF
email_message_ALERT = email_message_ALERT & "Datalogger time is " & Status.Timestamp
email_tx_success_ALERT = EmailRelay (EMAIL_TO_ADDRESS_ALERT,EMAIL_SUBJECT_ALERT,email_message_ALERT,email_ServerResp_ALERT,EMAIL_ATTACHMENT_ALERT)
email_trigger_ALERT = False '''reset my trigger
EndIf
NextScan ' end of the scan (01,Hr,2,0)
EndSequence
EndProg
Regards,
Juan Caycho B.
Hi Juan Caycho B.,
The program works well.
Thanks for your great help.
Regards,
TLT