GENESIS32: ส่งเมล์เมื่อมีAlarmเกิดขึ้น (ไม่ใช้Add-on)

ถ้าต้องการให้ส่งAlarmทางGmailโดยไม่ต้องใช้AlarmMMXของGENESIS32ซึ่งเป็นAdd-onของGENESIS32เราก็สามารถใช้ScriptWorXแทนได้ แต่ถ้าต้องการความสะดวกแนะนำให้ใช้AlarmMMXซึ่งสามารถส่งและAcknowledge Alarmทางอีเมล์, SMS, Skype, Text to Speech ฯลฯ ได้

image

ข้อดีคือ ฟรี ยืดหยุ่น แม้ต้องเขียนโค้ดแต่ไม่มาก

ถ้าต้องการส่งข้อมูลรายงานในDataLog(TrendWorX)ไปยังอีเมล์ผู้รับเมื่อมีAalrmหรือเหตุการณ์เกิดขึ้น ให้ข้ามไปดูบทความนี้เลย(ไม่ต้องเขียนโค้ด ไม่ใช้Add-on) รายงานออกแบบได้เองแบบExcel(ใส่ชาร์ต/สูตร/ภาพ/ฯลฯได้)

 

Requirement

ในWindows7, 8, 8.1 ขึ้นไปต้องทำการEnable Powershellเสียก่อน เนื่องจากScriptที่ใช้ในการส่งเมล์ในบทความนี้อาศัยPowershell โดยเปิดCommand Promptขึ้นมาด้วยสิทธิ์Administrator(คลิ้กขวามที่cmdเลือกRun as administrator) จากนั้นใช้คำสั่งเพื่อเปิดการใช้งานPowershell

image

C:\Windows\System32\WindowsPowerShell>powershell.exe -command set-executionpolicy unrestricted

นอกจากนี้จะต้องเปิดการใช้งานอ็อปชั่น “แอพที่มีความปลอดภัยน้อย” ของGmailเพื่ออนุญาตให้โค้ดเรียกใช้SMTPของGmailได้ โดยให้ล็อกอินGmailเสียก่อนแล้วไปที่ลิงค์นี้ เพื่อทำการ”เปิด”

ให้สร้างFolder ชื่อ testmail ไว้ใน C:\เพื่อใช้เก็บไฟล์Powershellที่จะทำการรัน

 

สร้างAlarmในAlarmWorX

ให้สร้างAlarmในAlarmWorXตามปกติ

image

 

สร้างAlarm TriggerในUDM

สร้างAalrmTriggerเพื่อนำไปสั่งงานScriptโดยเปิด Unified Data Manager ของGENESIS32ขึ้นมาจากนั้นสร้างTrigger Itemขึ้นมาในกิ่งExample Alarm Subscription

image

เลือกแท็ปAlarm Trigger OptionsเลือกAalrmตัวที่ต้องการให้ส่งEmail

image

คลิ้กApply

ถ้ามีAlarmตัวอื่น ๆ อีกให้สร้างTrigger Itemขึ้นมาอีก โดยTriggerจะเป็นAlarmรายตัวหรือAreaก็ได้

 

สร้างScriptในScriptWorXเพื่อส่งEmail

สร้างProjectใหม่ในScriptWorX2010

image

image

แล้วสร้างDesignerใหม่ขึ้นมา (แต่ละDesignerจะมีThreadของตัวเอง)

image

สร้างScriptใหม่ใต้กิ่งDesignerที่สร้างขึ้นมา Scriptที่สร้างขึ้นนี้ให้ใช้TriggerจากUDMที่เราสร้างขึ้นมา (เมื่อTriggerทำงานจะสั่งให้Scriptทำงาน)

image

image

คลิ้กEdit VBA Code เข้าไปเขียนScript

image

Dim str1 As String
str1 = "Bit1 is On, Time = " & Now
Call sendMail(str1)

คัดลอกโค้ดข้างต้นมาใส่ในกรอบสีแดง จากาตัวอย่างเป็นการส่งข้อความว่า Bit1 is on, Time = …เวลาที่ส่งEmil …

image

สังเกตว่าจะมีคำสั่งCall sendMail(…)ซึ่งเป็นการเรียกSubชื่อsendMailซึ่งเรายังไม่ได้สร้าง subนี้จะมีหน้าตาดังนี้

image

คัดลอกโค้ดข้างต้นจากลิงค์นี้มาวางข้างใต้Sub sendEmail

แล้วเปลี่ยนอีเมล์ผู้ส่งจากme@gmail.comและอีเมล์ผู้รับจากme@hotmail.comเป็นข้อมูลที่ใช้จริง นอกจากนี้ให้กำหนดPasswordของGmailให้ตรงกับของผู้ส่งจริงด้วยในบรรทัด

image

เมื่อสร้างScriptเสร็จแล้วให้Save

image

จากนั้นกลับมายังหน้าคอนฟิกของScriptWorX 2010 แล้วทำการBuild DLL

image

โปรแกรมจะแจ้งว่าสร้างไฟล์DLLอะไรมาบ้าง

image

เมื่อมีAlarmอื่นๆที่จะส่งอีเมล์อีกให้สร้างScriptใหม่เข้ามาในDesignerเดิมจนครบจำนวนAlarmที่ต้องการแจ้วทางอีเมล์(หรือแจ้งทีเดียวโดยใช้Area Alarmเป็นเงื่อนไขในTrigger)

image

image

คลิ้กEdit VBA Codeเข้าไปสร้างโค้ดส่งEmailเหมือนก่อนหน้านี้ โดยสร้างเฉพาะคำสั่งส่งอีเมล์ที่ต้องการ ไม่ต้องสร้างPublic sub sendMailอีกแล้วเพราะมีอยู่แล้ว แค่เรียกใช้งานsendMailโดยส่งพารามิเตอร์ข้อความที่จะส่งก็พอ

image

 

ทำการSaveและสร้างDLLดังที่เคยทำมาแล้ว

ทำกาทดสอบโดยStartการทำงานของScriptWorX2010

image

ถ้ามีAlarmตามที่ระบุจะทำให้Scriptทำงาน ถ้ามีPopupขึ้นมาให้พิมพ์yแล้วEnter(เฉพาะครั้งแรกเท่านั้น ครั้งต่อไปจะไม่มีPopup)

image

ผลลัพธ์ที่ได้จากอีเมล์ที่อยู่ในInboxของผู้รับ

image

 

ถ้าต้องการยกเลิกการแจ้งเตือนทางเมล์ของบางAlarmในเอาเครื่องหมายEnableออกจากScriptนั้น แล้วคลิ้กปุ่มApplyจากนั้นStart ScriptWorXใหม่

image

 

 

สั่งให้ทำงานแบบService

เมื่อต้องการให้ ScriptWorX2010 ทำงานแบบ Service (ทำงานพร้อมวินโดวส์และอยู่เบื้องหลังแบบ Background คือไม่ปรากฏหน้าต่างโปรแกรมให้เห็น) ก็สามารถกำหนดใน GENESIS Tool Tray ได้

image

โดยหลังจากเปิด GENESIS32 Tray ขึ้นมาแล้วให้คลิ้กขวา เลือก ScriptWorX 2010 > NT Service

image

รูปที่ 8

จากนั้นคลิ้กขวาเลือก Configure ที่ GENESIS32 Tray เพื่อเข้าไปกำหนดการเริ่มทำงานพร้อม Windows

image

เท่านี้ก็จะทำให้ Script ของเราทำงานอยู่เบื้องหลัง

 

Note:

การส่งเมล์ตามตัวอย่างให้ตรวจสอบความถูกต้องของอีเมล์และpasswordผู้ส่ง และอีเมล์ผู้รับให้ถูกต้อง ถ้าต้องการใช้SMTPอื่นนอกจากGmailตามตตัวอย่าง ให้ตรวจสอบSMTPของอีเมล์และportที่ใช้(ในตัวอย่างGmailใช้port 587 ซึ่งSMTPอื่น ๆ ทั่วไปจะใช้พอร์ต25)และUser/PasswordสำหรับEmail Accountนั้นๆ

 

ก้าวต่อไป

ถ้าต้องการส่งalarmแยกผู้รับ เราอาจจะปรับปรุงโค้กsendMailให้รับพารามิเตอร์คือที่อยู่ผู้รับ ทำแบบนี้จะสามารถระบุผู้รับต่าง ๆ กันตามAlarmได้ เช่น เพิ่มพารามิเตอร์ rcvr ซึ่งหมายถึงReciever แทนการระบุผู้รับโดยตรง

image

ก็จะสามารถส่งพารามิเตอร์จากsubอื่น ๆ ได้เช่น

Call sendMail(str1, “scada@eda.co.th”)

ก็จะสามารถส่งข้อความระบุผู้รับในScriptย่อยต่างๆ ได้

พบข้อสงสัยสอบถามที่ scada@eda.co.th ครับ

Advertisements
This entry was posted in Uncategorized. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s