こんにちは。ピャペロンです!
今回はパペロでフォルダの監視をしてみよう!
あらかじめパペロシミュレーターを動かす環境を整えておこう。第2回 Windowsからパペロシミュレーターを動かしてみた
※実機のパペロがないとパペロでのフォルダ監視はできません。動作未確認ですがスクリプトを実行する環境のフォルダを監視してパペロに命令を送ることはできると思います。
使用するソフト
・Windows 10
・テキストエディタ(Visual Studio Code)
・Google Chrome
・Python 3.6.6 ※実機で動かす場合はPython 3.4で開発しないと動作しない可能性があります。
参考
・opkgでパッケージをインストールできるようになりました | PaPeRo i [非公式] Developer Forum
・ファイルの更新をきっかけにコマンド実行 (python編) – Qiita
監視するフォルダが変更されると関数実行
中央ボタンで終了
このような動きを実現してみよう
パペロ実機にpythonをインストール
opkgでパッケージをインストールできるようになりました | PaPeRo i [非公式] Developer Forum
を参考にpython3をインストールしたら[python3 -m pip install watchdog]でwatchdogモジュールをインストールする。
- from logging import basicConfig, DEBUG, getLogger
- basicConfig(level=DEBUG)
- logger = getLogger(__name__)
- import sys
- import pypapero
- import time
- from watchdog.observers import Observer
- from watchdog.events import FileSystemEventHandler
- class Watch_Handler(FileSystemEventHandler):
- def on_moved(self, event): #ファイルが移動したら
- print("on_moved")
- def on_created(self, event): #ファイルが作成されたら
- print("on_created")
- def on_deleted(self, event): #ファイルが削除されたら
- print("on_deleted")
- def on_modified(self, event): #ファイルが変更されたら
- print("on_modified")
- class Watch_Papero(pypapero.Papero):
- def __init__(self, simulator_id, robot_name, arg_ws_server_addr):
- self.end = False
- self.watch_path = "/Extension/tmp/" #監視するフォルダ
- return super().__init__(simulator_id, robot_name, arg_ws_server_addr)
- def send_event_message(msg): #イベントメッセージを処理
- if msg[0]["Name"] == "detectButton" and msg[0]["Status"] == "C": #中央ボタンが押されたら
- papero.send_stop_speech()
- time.sleep(0.5)
- papero.send_start_speech("おやすみなさい")
- papero.papero_cleanup()
- papero.end = True
- elif msg[0]["Name"] == "detectButton" and msg[0]["Status"] == "L":
- pass
- if __name__ == "__main__":
- simulator_id, robot_name, ws_server_addr = None, None, "ws://127.0.0.1:8088/papero"
- while True:
- papero = Watch_Papero(simulator_id, robot_name, ws_server_addr)
- if papero.errOccurred == 0:
- break
- time.sleep(10)
- watch = Watch_Handler() #イベントハンドラ生成
- observer = Observer() #監視者の生成
- observer.daemon = True
- observer.schedule(watch, papero.watch_path) #イベントハンドラと監視対象の設定
- observer.start() #監視スタート
- papero.send_start_speech("起動が完了しました")
- while not papero.end:
- message = papero.papero_robot_message_recv(None)
- send_event_message(message)
監視対象フォルダにファイルを作成して、変更、削除してみよう。
設定した関数が実行されていれば成功だ!