You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
2.1 KiB
63 lines
2.1 KiB
import logging
|
|
import socket
|
|
|
|
from apscheduler.schedulers.asyncio import AsyncIOScheduler
|
|
from models import DrugStateEnum, Drug
|
|
from pytz import timezone
|
|
|
|
class ChannelGate():
|
|
def __init__(self):
|
|
# 创建一个TCP/IP套接字
|
|
self.client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
# 服务器的IP地址和端口号
|
|
self.server_address = ('192.168.1.161', 6012)
|
|
# 连接服务器
|
|
self.client_socket.connect(self.server_address)
|
|
# 激活声光报警
|
|
self.cmd_warning = bytes.fromhex('05 09 FF 48 AA 11 20 00 77 D6')
|
|
self.cmd_get_rfid = bytes.fromhex('05 08 FF 53 AA 11 12 DE EF')
|
|
|
|
def read_data(self):
|
|
try:
|
|
# 激活声光报警
|
|
# cgcmd_warning = bytes.fromhex('05 09 FF 48 AA 11 20 00 77 D6')
|
|
# 获取RFID标签
|
|
# cgcmd_get_rfid=bytes.fromhex('05 08 FF 53 AA 11 12 DE EF')
|
|
self.client_socket.sendall(self.cmd_get_rfid)
|
|
|
|
# 接收服务器的响应
|
|
data = self.client_socket.recv(1024)
|
|
if len(data)> 15:
|
|
print('Received:', data.hex(),len(data))
|
|
return data
|
|
except:
|
|
self.client_socket.connect(self.server_address)
|
|
|
|
def parse_uid(self,data):
|
|
if len(data)>15:
|
|
rfid_label = data[19:27].hex()
|
|
return [rfid_label]
|
|
else:
|
|
return []
|
|
|
|
|
|
async def check_uid_status(instance,rfid_labels):
|
|
for rfid_label in rfid_labels:
|
|
drug = await Drug.filter(rfid=rfid_label).get_or_none()
|
|
if drug is None or drug.state != DrugStateEnum.OUT:
|
|
print("发送警报")
|
|
instance.client_socket.sendall(instance.cmd_warning)
|
|
|
|
async def worker():
|
|
instance = ChannelGate()
|
|
await check_uid_status(instance,instance.read_data())
|
|
|
|
def start():
|
|
scheduler = AsyncIOScheduler(timezone=timezone('Asia/Shanghai'))
|
|
scheduler.add_job(worker, 'interval', seconds=0.1)
|
|
logging.basicConfig()
|
|
logging.getLogger('apscheduler').setLevel(logging.WARNING)
|
|
|
|
# scheduler.add_job(environment_log_job, 'cron', hour="8,20")
|
|
scheduler.start()
|