60초마다 라즈베리파이의 UPS 전압, 충전량, CPU온도를 mysql에 저장하는 파이썬 코드
smbus, pymysql 필요
smbus 설치
sudo apt-get install i2c-tools python3-smbus
venv 구성 및 pymysql 설치
sudo apt-get install python3-venv
python3 -m venv 가상환경명
source 가상환경명/bin/activate
pip3 install pyinstaller
sudo apt-get install python3-dev
sudo apt-get install python3-setuptools
pip3 install pymysql
python3 -m pip install mysql-connector-python
//가상환경종료
deactivate
desc tblstatus

code (.ups_status.py)
import struct
import smbus
import sys
import os
import RPi.GPIO as GPIO
import pymysql
import pymysql.cursors
import subprocess
def readVoltage(bus):
address = 0x36
read = bus.read_word_data(address, 0x02)
swapped = struct.unpack("<H", struct.pack(">H", read))[0]
voltage = swapped *1.25 / 1000 / 16
return voltage
def readCapacity(bus):
address = 0x36
read = bus.read_word_data(address, 0x04)
swapped = struct.unpack("<H", struct.pack(">H", read))[0]
capacity = swapped/256
return capacity
def QuickStart(bus):
address = 0x36
bus.write_word_data(address, 0x06, 0x4000)
def PowerOnReset(bus):
address = 0x36
bus.write_word_data(address, 0xfe, 0x0054)
def ThermalCPU():
thermal = float(subprocess.check_output(['cat','/sys/class/thermal/thermal_zone0/temp']))/1000
return thermal
def ConnectSQL():
global db, cur
db = pymysql.connect(host='localhost', user='유저', password='비밀번호', db='pi_status', charset='utf8')
cur = db.cursor()
def closeSQL():
global db, cur
cur.close()
db.close()
cur, db = None, None
def isCriticalStatus():
if (((GPIO.input(4)==0) and readCapacity(bus)<30) or ThermalCPU() > 80):
return True
else :
return False
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(4,GPIO.IN)
bus = smbus.SMBus(1)
PowerOnReset(bus)
QuickStart(bus)
ConnectSQL()
critstatus = isCriticalStatus()
while not critstatus:
thermal = ThermalCPU()
voltage = readVoltage(bus)
capacity = readCapacity(bus)
sql = 'insert into `tblstatus` values(current_timestamp,'+str(voltage)+','+str(capacity)+','+str(thermal)+')'
cur.execute(sql)
db.commit()
time.sleep(60)
critstatus = isCriticalStatus()
closeSQL()