-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrmmini_controller.py
76 lines (65 loc) · 2.35 KB
/
rmmini_controller.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
from fastapi import FastAPI
from starlette.templating import Jinja2Templates
from starlette.requests import Request
import broadlink
import db
from models import Rmmini, Command
from starlette.responses import RedirectResponse
app = FastAPI()
device = None
templates = Jinja2Templates(directory="templates")
@app.get("/")
async def index(request: Request):
devices = db.session.query(Rmmini).all()
db.session.close()
return templates.TemplateResponse('index.html', {'request': request, 'devices': devices})
@app.get("/rmmini/discovery")
async def rmmini_discovery():
devices = broadlink.discover(timeout=10)
#if len(devices):
# for node in devices:
@app.get("/rmmini/{rmmini_id}/command_list")
async def rmmini_command_list(rmmini_id: int, request: Request):
commands = db.session.query(Command).filter(Command.device_id == rmmini_id).all()
db.session.close()
return templates.TemplateResponse('commands.html', {'commands': commands, 'request': request})
@app.get("/rmmini/{rmmini_id}/learn")
async def rmmini_learn():
# enter_learning()
# check_data()
pass
# RMminiにIRコマンドを送信する
@app.get("/rmmini/{rmmini_id}/{func_id}/send")
async def rmmini_send(request: Request, rmmini_id: int, func_id: int):
device = get_rmmini_info(rmmini_id)
if device:
ir_command = get_rmmini_command(rmmini_id, func_id)
if ir_command:
device.send_data(bytearray.fromhex(ir_command))
return RedirectResponse('/rmmini/' + str(rmmini_id) + '/command_list')
else:
return False
# RMminiのデバイス情報をDBから取得する
def get_rmmini_info(rmmini_id):
# DBのデータからホスト情報を作成
rmmini_info = db.session.query(Rmmini).filter(
Rmmini.id == rmmini_id).first()
device = broadlink.gendevice(
rmmini_info.devtype,
(rmmini_info.host, 80),
bytearray.fromhex(rmmini_info.mac_address))
db.session.close()
if device.auth():
return device
else:
return False
# 赤外線コマンドをDBから取得する
def get_rmmini_command(rmmini_id, func_id):
ir_command = db.session.query(Command.ir_command).filter(
Command.device_id == rmmini_id,
Command.id == func_id).value(Command.ir_command)
db.session.close()
if ir_command:
return ir_command
else:
return None