QZSS で受信したデータに特定のワードがあった場合
QZSS「みちびき」からのデータで特定のワードがあった場合に、PushOver アプリで、通知を送信する Python スクリプトです。
特定のワードを埼玉とし
今回、特定のワードを「埼玉」としました。「埼玉」がマッチしたときに、行を「発表時刻」までさかのぼり、コピーして、メッセージとして送信します。メッセージ内容が重複し、同一の場合には、通知しないようにしています。
通知アプリに課金をする
通知をするアプリ、PushOver は、たしか、ひと月は無料です。課金制でもあり、iOS 版だと、700円ぐらいで買い切りです。
ラズパイと接続する方法
補足として。これは Raspberry Pi (ラズベリーパイ)と、GR-M10-RP を接続して QZSS から、災害危険情報を取得して行う方法です。QZSS からのデータを日本語に変換するスクリプトについては、以前の投稿にありますので、ご参考ください。
import time from pushover import Client import os from dotenv import load_dotenv # .envファイルから環境変数を読み込む load_dotenv() # Pushoverの初期設定 PUSHOVER_USER_KEY = os.getenv('PUSHOVER_USER_KEY') PUSHOVER_API_TOKEN = os.getenv('PUSHOVER_API_TOKEN') client = Client(PUSHOVER_USER_KEY, api_token=PUSHOVER_API_TOKEN) # ログファイルのパス LOG_FILE_PATH = os.getenv('LOG_FILE_PATH') # 前回送信したメッセージを記憶する変数 last_sent_message = None def send_pushover_notification(message): global last_sent_message if message != last_sent_message: client.send_message(message, title="Log Alert") last_sent_message = message def monitor_log_file(file_path): file_byte_pos = 0 while True: with open(file_path, 'r', encoding='utf-8') as file: file.seek(file_byte_pos) lines = file.readlines() file_byte_pos = file.tell() for i, line in enumerate(lines): if "埼玉" in line: # "埼玉"を含む行を見つけた場合、"発表時刻"まで遡る start_index = i for j in range(i, -1, -1): if "発表時刻" in lines[j]: start_index = j break message = ''.join(lines[start_index:i+1]) send_pushover_notification(message) time.sleep(2) if __name__ == "__main__": if os.path.exists(LOG_FILE_PATH): monitor_log_file(LOG_FILE_PATH) else: print(f"Log file {LOG_FILE_PATH} does not exist.")