272 lines
9.0 KiB
Python
272 lines
9.0 KiB
Python
from flask import Flask, Response, request, redirect
|
||
from os import path, system, remove
|
||
import datetime
|
||
import numpy as np
|
||
from time import sleep, time
|
||
from subprocess import Popen, PIPE
|
||
|
||
ap=path.abspath(__file__)
|
||
script_dir = path.dirname(ap)
|
||
tlfList = "%s/data/tlf.list" % script_dir
|
||
|
||
app = Flask(__name__)
|
||
|
||
import telebot
|
||
tbToken='7764038785:AAFNwMoOZWhqH9hQxDJsoWqSS3BYL4P9ua4'
|
||
bot = telebot.TeleBot(tbToken)
|
||
homeToken='5563613923:AAFGYdokQYJfTTQYhJftGZy3KtMDSZg5p6Q';
|
||
homebot = telebot.TeleBot(homeToken)
|
||
|
||
@app.route('/')
|
||
def root_dir():
|
||
return('Hello!')
|
||
|
||
@app.route('/ok')
|
||
def say_ok():
|
||
return('Ok')
|
||
|
||
@app.route('/gettlf', methods = ['POST', 'GET'])
|
||
def get_tlf():
|
||
tlfline=""
|
||
def check_tlf(tnum):
|
||
with open(tlfList, 'r') as f:
|
||
lines = [line.rstrip() for line in f]
|
||
for l in lines:
|
||
b = l.split("\t")
|
||
if tnum == b[0]:
|
||
tlfline = l
|
||
return (True, l)
|
||
return (False, "nonum")
|
||
opendoor = True
|
||
rez = 'Ok'
|
||
ts = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]
|
||
tlf = request.args.get('t')
|
||
if not tlf:
|
||
try:
|
||
tlf = request.form['t']
|
||
if not tlf:
|
||
tlf = '00000000000'
|
||
opendoor = False
|
||
rez = 'NT'
|
||
except Exception as e:
|
||
tlf = '00000000000'
|
||
opendoor = False
|
||
rez = 'ERR'
|
||
with open("./log/tlf.log", 'a') as f:
|
||
f.write("%s\t%s\n" % (ts, tlf))
|
||
if(opendoor):
|
||
chktlf, tlfline = check_tlf(tlf)
|
||
if chktlf:
|
||
system("curl -X GET http://192.168.50.63/openDoor")
|
||
bot.send_message('-1002333671072', "%s - открывание ворот" % tlfline)
|
||
else:
|
||
rez = 'NN'
|
||
return(rez)
|
||
|
||
@app.route('/doorchk')
|
||
def sb_doorchk():
|
||
doorid = request.args.get('doorid')
|
||
doorstat = request.args.get('doorstat')
|
||
vbat = request.args.get('vbat')
|
||
temp = request.args.get('t')
|
||
hum = request.args.get('h')
|
||
msgadd = ""
|
||
if not doorid:
|
||
return 'ERROR! No door number\n'
|
||
if not doorstat:
|
||
return 'ERROR! No door status\n'
|
||
if not vbat:
|
||
vbat = "-1"
|
||
#//else:
|
||
#// if(float(vbat) < vbat_low):
|
||
#// tg_alert("DOOR CHECK [%s] VBAT LOW %s" % (doorid, vbat))
|
||
if temp:
|
||
msgadd = " / Температура %.2fV" % float(temp)
|
||
if hum:
|
||
msgadd = "%s / Влажность %.2fV" % (msgadd, float(hum))
|
||
|
||
msgadd = ""
|
||
ts = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||
if(int(doorstat)==0):
|
||
msg = "Калитка %s. Открытие. %s%s\n" % (doorid, ts, msgadd)
|
||
else:
|
||
msg = "Калитка %s. Закрытие. %s%s\n" % (doorid, ts, msgadd)
|
||
|
||
uid = "245058979"
|
||
#homebot.send_message(uid, msg)
|
||
bot.send_message('-1002333671072', msg)
|
||
return 'Сообщение отправлено\n'
|
||
|
||
@app.route('/hm')
|
||
def heart_mon():
|
||
data = request.args.get('data')
|
||
answ = 'OK'
|
||
if not data:
|
||
data = 'data empty'
|
||
answ = 'ERR'
|
||
ts = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]
|
||
with open("./log/heart_mon.stat", 'a') as f:
|
||
f.write("%s\t%s\n" % (ts, data))
|
||
p=data.split(",")
|
||
tm=int(time())
|
||
if len(p) >=3 :
|
||
ma=p[2].replace(':','')
|
||
#cmd="mosquitto_pub -u \"shurik\" -P \"Iehbr2023\" -h 127.0.0.1 -p 1883 -t \"homeassistant/sensor/sugar001/state\" -m '{\"MAC\":\"%s\",\"mmol\":%s,\"temp\":%s,\"time\":%i}'" % (p[2
|
||
if len(p) >=5 :
|
||
cmd="mosquitto_pub -r -u \"shurik\" -P \"Iehbr2023\" -h 127.0.0.1 -p 1883 -t \"sugarcontrol/sensor/sugar/%s/state\" -m '{\"MAC\":\"%s\",\"mmol\":%s,\"temp\":%s,\"time\":%i,\"sensor\":\"%s\"}'" % (p[4],p[2],p[0], p[1],int(p[3])/1000,p[4])
|
||
#cmd="mosquitto_pub -u \"shurik\" -P \"Iehbr2023\" -h 127.0.0.1 -p 1883 -t \"homeassistant/sensor/sugar/%s/state\" -m '{\"MAC\":\"%s\",\"mmol\":%s,\"temp\":%s,\"time\":%i}'" %
|
||
else :
|
||
cmd="mosquitto_pub -r -u \"shurik\" -P \"Iehbr2023\" -h 127.0.0.1 -p 1883 -t \"homeassistant/sensor/sugar/%s/state\" -m '{\"MAC\":\"%s\",\"mmol\":%s,\"temp\":%s,\"time\":%i}'" % (ma,p[2],p[0], p[1],tm)
|
||
print(cmd)
|
||
system(cmd)
|
||
else:
|
||
print("test data?")
|
||
return answ
|
||
|
||
@app.route('/hmShow')
|
||
def hm_show():
|
||
llimit = 10
|
||
log_file = "./log/heart_mon.stat"
|
||
new_log = "%s.tmp" % (log_file)
|
||
data = ''
|
||
try:
|
||
if llimit :
|
||
system("tail -n%s %s > %s" % (llimit, log_file, new_log))
|
||
log_file = new_log
|
||
with open(log_file, 'r') as f:
|
||
data = f.read()
|
||
except Exception as e:
|
||
data = "data log is empty\n"
|
||
return Response(data, mimetype='text/plain')
|
||
|
||
import psycopg2
|
||
DBName='tgbot' #'lifecontrol'
|
||
DBUser='tgbot' #'lifecontrol'
|
||
DBPass=''
|
||
DBPort='6432'
|
||
#DBHost='213.252.97.166'
|
||
DBHost='185.212.88.27'
|
||
def write2log(logfile, msg):
|
||
with open(logfile, "a") as f:
|
||
ts = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]
|
||
f.write("%s: %s\n" % (ts, msg))
|
||
|
||
@app.route('/drl')
|
||
def get_drug_list():
|
||
dataval = request.args.get('drp')
|
||
if not dataval:
|
||
return Response("не задан шаблон для поиска лекарств", mimetype='text/plain')
|
||
qs=str('%'+dataval+'%')
|
||
q="SELECT name_rus FROM drugs WHERE name_rus LIKE '%s'" % qs.upper()
|
||
write2log('./log/get_drug_list.log', q)
|
||
conn = psycopg2.connect(dbname=DBName, user=DBUser, password=DBPass, host=DBHost, port=DBPort)
|
||
cursor = conn.cursor()
|
||
cursor.execute(q)
|
||
records = cursor.fetchall()
|
||
data='По заданному шаблону лекарства не найдены'
|
||
i=1
|
||
for r in records:
|
||
if(i == 1):
|
||
data=r[0]
|
||
else:
|
||
data=data+"\n"+r[0]
|
||
i=i+1
|
||
cursor.close()
|
||
conn.close()
|
||
#data="АСПИРИН\nПЕНТАЛГИН\nПУРГЕН"
|
||
return Response(data, mimetype='text/plain')
|
||
|
||
|
||
@app.route('/pox', methods = ['POST']) # pulseoximeter
|
||
def pox():
|
||
try:
|
||
if(not request.headers):
|
||
return('ERR headers\n')
|
||
if(not request.headers["Title"]):
|
||
return('ERR Title\n')
|
||
i = request.headers["Title"].find(",")
|
||
ap_id = request.headers["Title"][:i]
|
||
ts = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]
|
||
rdat = request.data
|
||
#==================================================================
|
||
print("ld2410dat: data check")
|
||
with open("./log/pox_dat.%s" % ap_id, 'a') as f:
|
||
f.write("%s\t%s\t%s\n" % (ts, request.headers["Title"], rdat))
|
||
except Exception as e:
|
||
print(e)
|
||
return("sba work error")
|
||
return 'OK!\n'
|
||
|
||
@app.route('/getmr', methods = ['GET'])
|
||
def get_mr60():
|
||
datadir = "log"
|
||
lcnt=20
|
||
mrid = request.args.get('id')
|
||
if not mrid:
|
||
mrid = "01"
|
||
log = "%s/%s/pox_dat.R60_8266_%s" % (script_dir, datadir, mrid)
|
||
if not path.isfile(log):
|
||
return Response("no log file", mimetype='text/plain')
|
||
buf = "time,\t\t\tpulse,\tdyh-e,\tdist,\tmove\n"
|
||
databuf = Popen(["tail", "-n%i" % lcnt, log], stdout=PIPE, encoding='utf-8').communicate()[0]
|
||
lines = databuf.split("\n")
|
||
for line in lines:
|
||
p = line.split("\t")
|
||
if len(p) >=3 :
|
||
tdat = p[1].split(", ")
|
||
ttime = p[0].split(".")[0]
|
||
buf = buf + "%s\t%s\t%s\t%s\t%s\n" % (ttime, tdat[1], tdat[3], tdat[5], tdat[7])
|
||
return Response(buf, mimetype='text/plain')
|
||
|
||
@app.route('/mr60dat')
|
||
def mr60data():
|
||
datadir = "log"
|
||
lcnt=1
|
||
mrid = request.args.get('id')
|
||
if not mrid:
|
||
log = "%s/%s/pox_dat.R60_GERMAN" % (script_dir, datadir)
|
||
else:
|
||
log = "%s/%s/pox_dat.R60_8266_%s" % (script_dir, datadir, mrid)
|
||
if not path.isfile(log):
|
||
return Response("no log file %s" % log, mimetype='text/plain')
|
||
line = Popen(["tail", "-n%i" % lcnt, log], stdout=PIPE, encoding='utf-8').communicate()[0]
|
||
wa_file = "%s/templates/R60.html" % script_dir
|
||
data = ''
|
||
try:
|
||
with open(wa_file, 'r') as f:
|
||
data = f.read()
|
||
except Exception as e:
|
||
data = "data file is empty %s\n" % wa_file
|
||
p = line.split("\t")
|
||
#print("=================================================")
|
||
#print(len(p))
|
||
if len(p) >=3 :
|
||
tdat = p[1].split(", ")
|
||
#print(tdat)
|
||
ttime = p[0].split(".")[0]
|
||
data=data.replace("<%time%>", ttime).replace("<%heart%>", tdat[1]).replace("<%breath%>", tdat[3]).replace("<%dist%>", tdat[5]).replace("<%move%>", tdat[7])
|
||
#print("=================================================")
|
||
return Response(data, mimetype='text/html')
|
||
|
||
@app.route('/tgwebapp')
|
||
def tg_webapp():
|
||
wa_file = "./templates/webapp.html"
|
||
data = ''
|
||
try:
|
||
with open(wa_file, 'r') as f:
|
||
data = f.read()
|
||
except Exception as e:
|
||
data = "webapp file is empty\n"
|
||
return Response(data, mimetype='text/html')
|
||
|
||
@app.route('/tgpsybot')
|
||
def tg_psybot():
|
||
#rurl = "https://t.me/aipsyassistantbot"
|
||
rurl = "https://www.vysotamed.ru/"
|
||
return redirect(rurl)
|
||
|
||
|
||
if __name__ == '__main__':
|
||
app.run()
|
||
|