Help us understand the problem. What is going on with this article?

プログラム生存確認のLチカ、ボタン一発でshutdownで、LCDなしでも簡単IoT化

More than 1 year has passed since last update.

Overview

Raspberry Piで、自前IoTを作っていると、Linuxが故に、ちゃんとshutdownしたいが、SSHしたり、HDMI+Keyboardとかを使うのは面倒。

また、LCDがない場合でも、自分のプログラムなど特定のプログラムがちゃんと動いているかどうかを知りたい。

というわけで、作りました。

まず、コア部分の説明 : プロセスの存在確認

def isProcessExisting(command):
    found = False
    if os.path.exists(ProcessWatcher.PATH_PROC):
        pids = [pid for pid in os.listdir(ProcessWatcher.PATH_PROC) if pid.isdigit()]
        for pid in pids:
            try:
                cmd = open(os.path.join(ProcessWatcher.PATH_PROC, pid, "cmdline"), "rb").read()
                found |= (command in cmd)
                if found:
                    break
            except IOError:
                continue

    return found

このようにして、指定されたコマンドを含むプロセスが存在するかどうかを確認します。

作ったもの

特定用途向けに作り込ずに、今回は、汎用化してありますので、configファイルでいろいろなシチュエーションに対応できるかと思います。

https://github.com/hidenorly/RPiStatusLedAndShutdownButton

config.json
{
    "button_shutdown":{
        "port": 18,
        "pull-up": true,
        "active": false,
        "execute": "shutdown -h now",
        "timeout": 0
    },
    "button_reboot":{
        "port": 19,
        "pull-up": true,
        "active": false,
        "execute": "shutdown -r now",
        "timeout": 0
    },
    "process_apache2":{
        "port": 23,
        "active": true,
        "command": "apache2",
        "onFound": "",
        "onLost": "service restart apache2",
        "timeout": 0
    }
}

上のようにjsonファイルで、挙動を指定します。

上の例は、
* GPIO:18にスイッチを繋いで、Switchが押されたらGNDに落とす回路の場合に、 shutdown -h now を実行します(実際には押してから離した時)
* 同様に、19は、 shutdown -r now です
* apache2 の実行ファイル名を含むprocessがいなくなった場合に、 service restart apache2 を実行します。

考えられる利用例

  • 一定電圧以下になったら、電源終了 (コンパレーターの結果をGPIに入れれば良い)
  • ボタンを押したら、mail通知 ( echo hoge | mail hoge@hoge.com )
  • 自分のプログラムが動いているかどうかをLEDで知る
hidenorly
All tweets are my personal opinions and do not represent those of my employer.
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした