浅間高原⁸⁷⁹㍱            

©啄木鳥ハウス                 

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マクロWindowsWindows 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()                                         # ポートクローズ