first commit

This commit is contained in:
root 2024-04-29 07:04:45 +00:00
commit 272b358144
5 changed files with 106 additions and 0 deletions

1
README.md Normal file
View File

@ -0,0 +1 @@
# m1s_ups_control

13
install_service.sh Executable file
View File

@ -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'

25
kill.sh Executable file
View File

@ -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}

15
m1s_ups.service Executable file
View File

@ -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

52
service.py Executable file
View File

@ -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)