「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。
ソフテックだより(発行日順)のページへ
ソフテックだより 技術レポート(技術分野別)のページへ
ソフテックだより 現場の声(シーン別)のページへ
弊社の監視制御システムとしてFAVIEWがありますが、顧客からFAVIEWの警報が出た時にEメール通知を行いたいという要望があり、FAVIEWの追加機能として警報メール通知機能を追加しております。
その際に考慮したこと、使った機能、今後の利便性向上案などについて本ソフテックだよりでご紹介いたします。
監視制御システムのFAVIEWはWindows上で稼働するSCADA(Supervisory Control And Data Acquisition)となっており、制御機器から上がってくる信号をもとに画面に情報を表示したり、アラーム履歴などを確認することが出来ます。
工場などは24時間稼働している場所も多く、アラームの内容によって重要度が高く急を要する場合がありますが、常に保守員が現場に待機するというのは難しい状況が考えられます。
重要度が高いアラームが発生した場合、現場に居なくても分かる様にするために、登録したメールアドレスに通知するという事を行う事で、携帯やスマホで状況を確認することができるようになり、休日や深夜帯などでも内容を把握して素早い対応を取れるようにするという事を目的にしています。
図1. OSI参照モデル
本件の警報メール通知機能を開発するにあたって下記のような事を考慮しながら設計、製造、テストを行っております。
これらの事を考慮することで、アラームの重要度に応じて担当者を分けて通知することや、勤務時間帯には通知しないなど、使い勝手を考慮して不要な通知をしない様にカスタマイズできるようにしています。
本警報メール通知機能はVisual Basic.NETにて開発を行っています。メール通知の機能は.Net Frameworkの標準で使う事ができる「System.Net.Mail」を使用して実現しています。
機能や実装については本ソフテックだよりでは詳しく説明は致しませんが、下記URLのマイクロソフト社の技術情報などを参考にしていただく事で実装に必要な情報を得ることができます。
https://docs.microsoft.com/ja-jp/dotnet/api/system.net.mail?view=netframework-4.7.2
社内環境での試験及び連続稼働試験を終えて、お客様の本番稼働環境で動作させたときにメール通知異常が発生しました。調査したところ通知先のメールアドレスが「RFC違反」していた為でした。
System.Net.Mailを使ったメールアドレスはRFC準拠となっている必要があり、RFC違反しているメールアドレスに送信した場合は例外異常が発生します。
RFC(Request For Comment)とはインターネット技術の標準を定める団体が正式に発行する文書でこのRFCにはインターネットに関する決まりごとや、メールアドレスに関するルールが定義されています。
今回お客様の本番環境で発生した異常は下記のようなメールアドレスでした。赤字にした箇所のように@マークより前の文字列にドットが連続するメールアドレスはRFC違反となります。今回の件で通知先のメールアドレスの形式も注意が必要だという事が分かり勉強になりました。
RFC違反メールアドレス例:faview..sft@softech.co.jp
※過去には一部の携帯キャリアなどRFC違反のメールアドレスも登録して使用出来ていた様ですが、最近はRFC準拠となっている様です。
本警報メール通知機能はFAVIEWパソコン上で動作していますが、発生したアラーム情報はFAVIEWのイベント収集機能により、SQLデータベース上に蓄積されていきます。
そのため警報メール通知機能はデータベースのアラーム情報テーブルに新規追加があるか判断して、メール通知を行っています。
警報メール情報のインターフェースはFAVIEWと直接やり取りせずに、データベースにすることで、アラームの取得条件をプログラムに依存せずに柔軟に変更できるようにしています(アラーム情報を取得するクエリを設定ファイル化)。
また複数のデータベースを登録してアラーム情報を巡回チェックする機能も用意してありますので、複数の設備をチェックしてメール通知も可能です。
図2. 複数データベースの巡回チェック
今回はEメールでアラームを通知するという対応をさせて頂きましたが、たとえばEメールだけではなくLINEに警報メール通知グループを作成して、設備のアラーム発生状況を通知するという事も可能です。
また開発環境や、警報メール通知のアプリケーション自体をクラウドに置いて動作させるという事も可能です。たとえばAmazonのCloud9 AWS(以降Cloud9と省略)のサービスを使う事で、ブラウザベースでクラウドにある開発・実行環境を使ってプログラムの開発が行えるようになり、インターネット環境があればどこからでもプログラムの変更や実行が可能になります。
またグーグル社のGメールに送ったメールを自動的にLINE通知する事も可能です(GoogleのGoogle Apps Scriptを使用して簡単なプログラムを記述する必要があります)
今回はCloud9を使って、LINEへのメッセージ通知のサンプルを作成してみましたので簡単に紹介致します。
LINEでは「Line Notify」というサービスを提供しており、このサービスを使う事でLINEにプログラムから通知を行える様になります。
公式サイトにアクセスして、「Line Notify」を使用するためのアクセストークンを取得する必要があります。ここでは詳細は割愛しますが下記のようなアクセストークン文字列を取得することができます。(下記のトークンは一部*マークで伏せ字にしています)
アクセストークン:KtUJj3TQ*****************************BIgpAr
このアクセストークン文字列を使う事でLINE通知の準備が整います。
Cloud9にてコンソールを作成して開発言語はpythonを選択します。下記の様にプログラムを記述することでpythonからLINE通知するための下地が整います。
後は取得したトークン文字列をプログラム内に記述して、LINE Notifyの機能に送りたい文字を設定して呼び出すだけです。下記では「LineSend」という簡単な関数を用意し、指定した文字列を通知できるようにしてあります。
図3. クラウドにあるCloud9の開発環境及び実行環境をブラウザで操作
プログラムを実行すると下記のようにLINEで受信することが出来ました。
図4. LINEでのメッセージ受信画面
今回はFAVIEWの監視システムと組み合わせて、警報メール通知アプリを実行させてメールを送るという形で実現させましたが、上記のようにLINEに通知する事やTwitterで何かをつぶやくアプリケーションの開発も比較的簡単に行う事ができる環境が整っています。
現在ではインフラといってもいいほど普及しているLINEやTwitterですが、これを超えるようなインターネットサービスや技術が現れたときに、新しい技術とこれまで培ってきた関連技術を組み合わせた新しい付加価値を作り、提案できるようにしていけると面白いと思います。
また今回初めてCloud9やGoogle Apps Script、pythonを個人的に使ってみました。
今回のソフテックだよりには記載しませんでしたが、Google Apps Scriptでは今回紹介したLINE通知例よりも簡単にGメールに届いたメールをLINEに通知するようにプログラムを組む事ができたり、pythonではAI用のディープラーニングライブラリなどが非常に充実している事を知りました。
AI関係ではグーグル社が提供しているTensorFlow、Facebook社が提供しているPyTorchなど様々なライブラリが公開されています。今後はこのようなAIを効果的に使った制御用ソフトウェアの開発、関連する仕事が増えそうだと考えています。
普段仕事で扱っている言語や開発環境を変えてみる事で、新たな気づきを得る事ができたのは刺激になりました。今後も新しい事に興味を持って、取り組んで行きたいと思います。
(S.N.)
関連ページへのリンク
関連するソフテックだより