From 272b358144eb5065a1aabc91ebf8321b227dc005 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 29 Apr 2024 07:04:45 +0000 Subject: [PATCH] first commit --- README.md | 1 + install_service.sh | 13 ++++++++++++ kill.sh | 25 ++++++++++++++++++++++ m1s_ups.service | 15 +++++++++++++ service.py | 52 ++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 106 insertions(+) create mode 100644 README.md create mode 100755 install_service.sh create mode 100755 kill.sh create mode 100755 m1s_ups.service create mode 100755 service.py diff --git a/README.md b/README.md new file mode 100644 index 0000000..464a78b --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# m1s_ups_control diff --git a/install_service.sh b/install_service.sh new file mode 100755 index 0000000..3c8d076 --- /dev/null +++ b/install_service.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +mkdir -p /etc/m1s_ups/ + +cp kill.sh /etc/m1s_ups/ +cp service.py /etc/m1s_ups/ +cp m1s_ups.service /etc/systemd/system/ + +systemctl daemon-reload + +systemctl enable --now m1s_ups + +echo 'install sucess' \ No newline at end of file diff --git a/kill.sh b/kill.sh new file mode 100755 index 0000000..9b74d0a --- /dev/null +++ b/kill.sh @@ -0,0 +1,25 @@ +#!/bin/bash +UPS_TTY_NODE="" +VID_CH55xduino="1209" +PID_CH55xduino="C550" +function find_tty_node { + UPS_TTY_NODE=`find $(grep -l "PRODUCT=$(printf "%x/%x" "0x${VID_CH55xduino}" "0x${PID_CH55xduino}")" \ + /sys/bus/usb/devices/[0-9]*:*/uevent | sed 's,uevent$,,') \ + /dev/null -name dev -o -name dev_id | sed 's,[^/]*$,uevent,' | + xargs sed -n -e s,DEVNAME=,/dev/,p -e s,INTERFACE=,,p` + +} + +function kill_dead_process { + PID="" + PID=`ps -eaf | grep ${UPS_TTY_NODE} | grep -v grep | awk '{print $2}'` + if [ -n "$PID" ]; then + kill -9 $PID + fi +} + +find_tty_node + +kill_dead_process + +echo ${UPS_TTY_NODE} \ No newline at end of file diff --git a/m1s_ups.service b/m1s_ups.service new file mode 100755 index 0000000..e7d1ca6 --- /dev/null +++ b/m1s_ups.service @@ -0,0 +1,15 @@ +Description=Check the M1S_UPS status + +After=syslog.target + +[Service] +Type=simple + +User=root + +# working directory +WorkingDirectory=/etc/m1s_ups/ +ExecStart=python3 -u ./service.py + +[Install] +WantedBy=multi-user.target diff --git a/service.py b/service.py new file mode 100755 index 0000000..a9a7f3a --- /dev/null +++ b/service.py @@ -0,0 +1,52 @@ +import serial +import os +import time +import subprocess +import pwmio +import board +import multiprocessing + +piezo = pwmio.PWMOut(board.D15, variable_frequency=True) +piezo.duty_cycle = 0 +piezo.frequency = 523 + +ups_loc = subprocess.check_output(['sudo','/bin/bash','kill.sh']) +ups_loc = ups_loc.decode("UTF-8") +ups_loc = ups_loc.replace("\n", "") +ser = serial.Serial(ups_loc, 9600) + +def swr(a): + a = bytes(a, 'utf-8') + ser.write(a) + a = ser.readline().decode("UTF-8") + a = a.replace("\n", "") + a = a.replace("\r", "") + a = a.replace("#", "") + a = a.replace("@", "") + return(a) + +prt = str() +while True: + print("------------------------------------------------------") + print("------------------------------------------------------") + a = swr('@Fx#').replace("F","") + print("firmware ver ",a) + vol = swr('@V0#').replace("V","") + print("current voltage "+vol+"mV") + a = swr('@C0#').replace("","") + if a != "CF1C1": + piezo.duty_cycle = 0 + print("Power Status Normal") + elif a == "CF0C0": + print("UPS !ERROR!") + else: + print("Power Loss Detect") + piezo.duty_cycle = 45000 + if int(vol) <= 3600: + ser.write(b'@Px#') + os.system("shutdown now") + print("------------------------------------------------------") + print("------------------------------------------------------") + time.sleep(1) + piezo.duty_cycle = 0 + time.sleep(1) \ No newline at end of file