Teratermマクロとタスクスケジューラ
TP-LINKのスマートプラグ(P105)を11台持っていて、意図せずハングした「raspberry Pi」などの遠隔PCの再起動に便利に使わせてもらっているが、1年半の間に、11台中「3台」が故障した。リセットボタンに全く反応せず、リレー音もしないので、回路の焼損だろうと思うが、保証期間中だったので、TP-LINKのサポートで3台すべてを交換してくれた。この件については、後日、書こうと思うが、取り敢えず、TP-LINKの対応に感謝し、今後の改良に期待する。
今回は、この話題ではなく、mineoマイピタでの「ゆずるね達成」のため、モバイルルータ FS030Wの電源を断/入しているが、電源のコントローラをTP-LINKのスマートプラグから画像の「4chUSBリレー」に変更した際に出会った困った出来事だ。なお、mineoの「ゆずるね」については別に述べる。
「4chUSBリレー基板」はヤフオクで廉価で譲ってもらい、Teratermマクロでの動作も問題なかったが、Teratermマクロを Windows (Windows 11)のタスクスケジューラに登録すると、エラーも吐かず「実行されない」という困った問題に出くわした。Windows タスクスケジューラの仕様(対話型プログラムはユーザーがログインしているときのみ実行される※¹)のようだが、「マクロを対話型と見なす」のなら、その旨通知がほしい。セキュリティ重視のエラー表示抑制も行き過ぎのように思う。
Pythonプログラムでの、USBシリアルコントロールはタスクスケジューラで問題なく実行できるので、タスクスケジューラに入れる場合には、Teraterm マクロではなく、Python (pyserial) の利用がお勧めだ。🤩
※¹ Schedule Windows 10 Sleep and Wake - Super User
######################################
# 4ch USB Relay Control Program
# by Python(3.11.1)
######################################
import sys, time, serial
# 引数(-)なら、<Usage>を表示
args = sys.argv
if (len(args) <= 1):
print('<Usage>:', args[0],' /k1|k2|k3|k4 on|off')
sys.exit()
args2 = str(args[1]+args[2])
if args2 == '/k1on':
senddata = [0xA0, 0x01, 0x01, 0xA2]
elif args2 == '/k1off':
senddata = [0xA0, 0x01, 0x00, 0xA1]
elif args2 == '/k2on':
senddata = [0xA0, 0x02, 0x01, 0xA3]
elif args2 == '/k2off':
senddata = [0xA0, 0x02, 0x00, 0xA2]
elif args2 == '/k3on':
senddata = [0xA0, 0x03, 0x01, 0xA4]
elif args2 == '/k3off':
senddata = [0xA0, 0x03, 0x00, 0xA3]
elif args2 == '/k4on':
senddata = [0xA0, 0x04, 0x01, 0xA5]
else:
senddata = [0xA0, 0x04, 0x00, 0xA4]
COM="COM7"
bitRate=9600
time.sleep(0.1)
ser = serial.Serial(COM, bitRate, timeout=0.1) # デバイス名とボーレートを設定しポートをオープン
time.sleep(0.2)
send_binary = bytes(senddata)
ser.write(send_binary)
time.sleep(0.2)
ser.close() # ポートクローズ