예제 #1
0
def init_smtp():
    """
    smtpの設定処理
    """
    global smtp
    global smtp_addr

    # データベースに格納してあるSMTPの情報を取得する
    smtp_cur = common.connect_database_project()
    # 送信元のアドレスはプロジェクトごとに一意であること。
    smtp_cur.execute("SELECT * FROM m_smtp_mail;")

    for smtp_row in smtp_cur.fetchall():
        # SQLで取得したSMTPの情報を各変数に分割して格納
        smtp_host = smtp_row[1]
        smtp_port = smtp_row[2]
        smtp_name = smtp_row[3]
        smtp_pass = smtp_row[4]
        smtp_addr = smtp_row[5]

    # 取得したSMTPの情報をもとにSMTP接続する
    smtp = smtplib.SMTP(smtp_host, smtp_port)
    smtp.login(smtp_name, smtp_pass)

    # 後処理としてクローズ処理を実行する
    common.close_con_connect(common.pj_con, smtp_cur)
예제 #2
0
def get_data():
    """
    直近の測定値を取得する処理
    """
    data_cur = common.connect_database_project()

    # 直近のデータを取得するSQL句の発行
    sel_sql = "SELECT * FROM farm ORDER BY desc, time DESC LIMIT 1;"

    # SQLを実行する
    data_cur.execute(sel_sql)

    for row in data_cur.fetchall():
        d_day = row[0]
        d_time = row[1]

    common.close_con_connect(common.pj_con, data_cur)

    check_data(d_day, d_time)
예제 #3
0
def get_data():
    """
    測定値テーブルに接続して、測定値を取得する処理
    """

    data_cur = common.connect_database_project()

    # 直近のデータを取得するSQL句の発行
    sel_sql = "SELECT * FROM data ORDER BY day DESC, time DESC LIMIT 1;"

    # SQLを実行する
    data_cur.execute(sel_sql)

    for row in data_cur.fetchall():
        fact_id = row[0]  # 工場ID
        tank_no = row[1]  # 水槽ID
        day_tbl = row[2]  # 日付
        time_tbl = row[3]  # 時刻
        water_temp = row[4]  # 水温
        salinity = row[5]  # 塩分濃度
        do = row[6]  # 溶存酸素

        # デバッグ用。取得した値を出力する
        print("工場ID:" + str(fact_id))
        print("水槽ID:" + str(tank_no))
        print("日付:" + str(day_tbl))
        print("時間:" + str(time_tbl))
        print("水温" + str(water_temp))
        print("塩分濃度" + str(salinity))
        print("溶存酸素" + str(do))

    # 後処理
    common.close_con_connect(common.pj_con, data_cur)

    # 測定値チェック処理の呼び出し(引数には取得した測定値を渡す)
    check_data(day_tbl, time_tbl, water_temp, salinity, do)
예제 #4
0
def get_data():
    """
    測定値テーブルに接続して、測定値を取得する処理
    """

    data_cur = common.connect_database_project()

    # 直近のデータを取得するSQL句の発行
    sel_sql = "SELECT * FROM farm ORDER BY day DESC, time DESC LIMIT 1;"

    # SQLの実行
    data_cur.execute(sel_sql)

    for data_row in data_cur.fetchall():
        day_tbl = data_row[0]
        time_tbl = data_row[1]
        soil_temp = data_row[2]
        soil_wet = data_row[3]
        soil_ec = data_row[4]
        air_temp = data_row[5]
        air_wet = data_row[6]

        # デバッグ用。取得した値を出力する
        print("日付:" + str(day_tbl))
        print("時刻:" + str(time_tbl))
        print("土壌温度" + str(soil_temp))
        print("土壌湿度" + str(soil_wet))
        print("土壌電気伝導度" + str(soil_ec))
        print("気温" + str(air_temp))
        print("湿度" + str(air_wet))

    common.close_con_connect(common.pj_con, data_cur)

    # 測定値チェック処理の呼び出し
    check_data(day_tbl, time_tbl, soil_temp, soil_wet, soil_ec, air_temp,
               air_wet)
예제 #5
0
def check_data(data_day, data_time):
    """
    測定値が取得できているかチェックする関数
    """

    global alert_flg
    global line_message

    # 共通データベースにアクセスする
    check_cur = common.connect_database_common()

    # 監視テーブルから、プロジェクトのデータを取得するSQL
    sel_sql = "SELECT * FROM m_monitor WHERE system_name = '" + \
        common.pj_name + "' AND monitor_name = 'KEISOKU';"

    # 監視テーブルの値をOKで更新するSQL
    upd_ok_sql = "UPDATE m_monitor SET MONITOR_STATUS = 'OK' , \
        CHK_TIMESTAMP = NOW() WHERE SYSTEM_ID = '"                                                   + \
        common.pj_name + "' AND monitor_name ='KEISOKU';"

    upd_ng_sql = "UPDATE m_monitor SET MONITOR_STATUS = 'NG' , \
        CHK_TIMESTAMP = NOW() WHERE SYSTEM_ID = '"                                                   + \
        common.pj_name + "' AND monitor_name ='KEISOKU';"

    # 監視履歴テーブルの値をOKでINSERTするSQL
    ins_ok_sql = "INSERT INTO h_monitor ( \
        system_id, system_name, monitor_name, monitor_status, check_time) \
        VALUES ("

    # 監視履歴テーブルの値をNGでINSERTするSQL
    ins_ng_sql = "INSERT INTO h_monitor ( \
        system_id, system_name, monitor_name, monitor_status, check_time) \
        VALUES( "

    # 時刻の表示が「05:00:00」でなく「5:00:00」のため桁合わせ
    if len(format(data_time)) == 7:
        day_time = format(data_day) + " 0" + format(data_time) + ".999999"
    else:
        day_time = format(data_day) + " " + format(data_time) + ".999999"

    # 測定値が直近のものか(5分前と比較)判断、測定が止まっていればアラート通知
    if format(day_time) < format(before_5min):
        # 古い測定値なので測定停止のアラート通知を行う
        check_cur.execute(sel_sql)

        for monitor_row in check_cur.fetchall():
            sys_id = monitor_row[0]
            sys_name = monitor_row[1]
            monitor_name = monitor_row[2]
            monitor_status = monitor_row[3]
        if monitor_status == "OK":
            alert_flg = "ON"  # アラート通知を"ON"にする(計測停止のLINE通知)
            line_message = line_message + "\n計測が停止しています。"

        # INSERT句の生成
        ins_ng_sql = ins_ng_sql + sys_id + ", '" + sys_name + \
            "', '" + monitor_name + "', 'NG', NOW() )"

        # システム監視テーブルのUPDATE
        check_cur.execute(upd_ng_sql)

        # 監視履歴テーブルのINSERT
        check_cur.execute(ins_ng_sql)

    else:
        check_cur.execute(sel_sql)
        for monitor_row in check_cur.fetchall():
            sys_id = monitor_row[0]
            sys_name = monitor_row[1]
            monitor_name = monitor_row[2]
            monitor_status = monitor_row[3]
        if monitor_status == "NG":
            alert_flg = "ON"  # アラート通知を"ON"にする(計測再開のLINE通知)
            line_message = line_message + "\n計測を再開しました。"

        # INSERT句の生成
        ins_ok_sql = ins_ok_sql + sys_id + ", '" + sys_name + \
            "', '" + monitor_name + "', 'OK', NOW() )"
        # システム監視テーブルのUPDATE(強制的にタイムスタンプを更新)
        check_cur.execute(upd_ok_sql)

        # 監視履歴テーブルのINSERT
        check_cur.execute(ins_ok_sql)

    common.close_con_connect(common.common_con, check_cur)