Pythonで始めるテストツール製作(4)電源（一次側）のオンオフ（Windows編）

## 1. はじめに
「[電源をオンオフするテスト手順を自動化する](https://qiita.com/pbjpkas/items/e96bf25ea2af901e31ad)」で作成した[switchbotplugmini.py](https://qiita.com/pbjpkas/items/e96bf25ea2af901e31ad#32-ソースコード)をモジュールとして利用しメニュー操作で電源をオンオフできるようにします。

### 1.1 これまでの記事
- [Pythonで始めるテストツール製作](https://qiita.com/pbjpkas/items/0b8a32e2b0e126fab8bc)
- [Pythonで始めるテストツール製作(2)オシロスコープの操作](https://qiita.com/pbjpkas/items/be69d2cb34eb7715170a)
- [Pythonで始めるテストツール製作(3)シリアルポートのデータ送受信](https://qiita.com/pbjpkas/items/6c64c199ee3fd2584ae8)
- [Pythonで始めるテストツール製作 Menu Based CLI編（技術書典）](https://techbookfest.org/product/5348598382329856)

## 2. 環境
- Windows 10 Home 22H2
- Python 3.10.0

## 3. ソースコード
メニュー操作は目視で行うことからレスポンスメッセージ(0100、0180など)をOFF、ON、UNKNOWNに置き換えて表示するようにします。

```python:mytools_switchbotplugmini.py
# mytools_switchbotplugmini.py by ka's@pbjpkas 2023
# for Windows
# MIT License
from switchbotplugmini import *

address="00:00:5E:00:53:00" #replace your SwitchBot Plug Mini MAC Address.

def response(result, resp):
    if binascii.hexlify(resp) == b"0100":
        print(result, "OFF")
    elif binascii.hexlify(resp) == b"0180":
        print(result, "ON")
    else:
        print(result, resp, "UNKNOWN")

def main():
    while True:
        print("== myTools SwitchBot Plug Mini(Windows) ==")
        print("a: Turn ON")
        print("b: Turn OFF")
        print("c: Toggle")
        print("d: Read State")
        print("x: exit")

        s = input(">")

        if s == "a":
            result, resp = switchbotplugmini(address, "turnon")
            response(result, resp)
        if s == "b":
            result, resp = switchbotplugmini(address, "turnoff")
            response(result, resp)
        if s == "c":
            result, resp = switchbotplugmini(address, "toggle")
            response(result, resp)
        if s == "d":
            result, resp = switchbotplugmini(address, "readstate")
            response(result, resp)
        if s == "x":
            if __name__ == "__main__":
                print("Bye.")
            return


if __name__ == "__main__":
    main()
```

## 4. 使い方

```cmd
python mytools_switchbotplugmini.py
```

以下のようにメニューとプロンプト(>)が表示されればOKです。

```
== myTools SwitchBot Plug Mini(Windows) ==
a: Turn ON
b: Turn OFF
c: Toggle
d: Read State
x: exit
>
```

## 5. mytools.pyへの組み込み
### 5.1 mytools.pyの改修
mytools.pyを3か所編集します。

```python:mytools.py
# myTools.py by ka's@pbjpkas 2023
# python 3.x
# MIT License
import sys
import cv2
import mytools_visa
import mytools_pyserial
import mytools_switchbotplugmini                      #1

#（略）

def main():    while True:
        print("== myTools ==")
        print("a: comparison of old and new value")
        print("b: crop image")
        print("c: VISA menu")
        print("d: Serial menu")
        print("e: SwitchBot Plug Mini(Windows) menu") #2
        print("x: exit")

        s = input(">")

        if s == "a":
            comparison_value()
        if s == "b":
            crop_image_menu()
        if s == "c":
            mytools_visa2.main()
        if s == "d":
            mytools_pyserial.main()
        if s == "e":
            mytools_switchbotplugmini.main()          #3
        if s == "x":
            print("Bye.")
            sys.exit()


main()
```

### 5.2 実行例
メニューにSwitchBot Plug Mini(Windows)メニューが追加されています。

```cmd
== myTools ==
a: comparison of old and new value
b: crop image
c: VISA menu
d: Serial menu
e: SwitchBot Plug Mini(Windows) menu
x: exit
>
```

## 6. おわりに
SwitchBot Plug Miniのオンオフ操作をメニュー形式でできるようになりました。