13
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Pythonを使ったデスクトップ通知の実装

Last updated at Posted at 2020-02-03

はじめに

  • ここでは pythonを使ったデスクトップ通知についてまとめます。
  • pythonのライブラリーを用いることで簡単に実装できます。
  • 以下、使用例(あくまでもこういうに使えるかもといった一例であり、もっと汎用的に使えると思います)
    • ある製品のバッテリー量がリアルタイムに格納されているデータベースがあったとして、バッテリー量のxx%を切った場合に通知。
    • あるサーバーのメモリ使用量がリアルタイムに格納されているデータベースがあったとして、メモリ使用量が80%を超えた場合に通知。
  • うまく使うことで作業効率化にも役立てると思います。

実行環境

  • Windows10
  • Python3
    • 使用ライブラリー
      • psycopg2
      • schedule
      • plyer

実装例

  • 以下のソースコードを実行することで、次のことが実現可能です。

    • 10秒ごとにDBのテーブルに対してSQLを発行して値を取得し、閾値を超えていた場合はデスクトップに通知。
  • 今回は例なので、以下のような時間とデータが入っているシンプルなテーブルですが、Viewなどを使って1時間平均にしたデータにするなど様々な形に展開できると思います。
    image.png

  • ソースコード


from plyer import notification
import psycopg2
import schedule
import time

def job(cur):
    alert = ""

    cur.execute("select data from sample order by time desc limit 1;")
    rows = cur.fetchall()
    hoge = rows[0][0]

    if int(hoge) >= 98:
        alert += "hogeが100%に近付いています。"

    if alert != "":
        notification.notify(
            title = "警告",
            message = alert,
            app_name = "モニター監視"
        )


print("監視を開始します。\n基準値付近になるとデスクトップ通知を行います。")

# 接続情報作成
con = psycopg2.connect("host=xxx.xxx.xxx.xxx port=xxxx dbname=xxxx user=xxxx password=xxxx")
cur = con.cursor()

# 指定時間ごとにjobを実行(今回は10秒ごと)
schedule.every(10).seconds.do(job, cur)

while True:
    try:
        schedule.run_pending()
        time.sleep(1)
    except KeyboardInterrupt:
        print("中断しました。")
        cur.close()
        con.close()
        break

実際の通知画面

  • 以下のようなデスクトップ通知が閾値を超えた場合に行われる。
    image.png
13
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?