ti-powerbar/app/views.py
2023-11-19 01:43:36 +01:00

79 lines
2.3 KiB
Python

from flask import render_template, Blueprint, make_response
from app.settings import powerbars
from flask import abort
from flask import jsonify
import telnetlib
from flask import jsonify
routes = Blueprint('routes', __name__)
def vaild_power_bar(powerbar):
if powerbar in powerbars:
return True
else:
return False
def vaild_outlet (powerbar, outlet):
if outlet in powerbars[powerbar]['outlets']:
return True
else:
return False
@routes.route('/')
def home():
print(powerbars)
return "hello world"
@routes.route('/<string:powerbar>/<int:outlet>/<string:action>')
def powerbar_control(powerbar, outlet, action):
print(f"powerbar: {powerbar}")
print(f"outlet: {outlet}")
print(f"action: {action}")
if not action in ['on', 'off', 'cycle']:
print("Invalid action")
return jsonify({'error': 'Invalid action'}), 400
if not vaild_power_bar(powerbar):
print("Invalid powerbar")
return jsonify({'error': 'Invalid powerbar'}), 400
if not vaild_outlet(powerbar, outlet):
print("Invalid outlet")
return jsonify({'error': 'Invalid outlet'}), 400
if action in ['on', 'off']:
try:
print(f"Turning {action} powerbar {powerbar} outlet {outlet}")
tn = telnetlib.Telnet(powerbars[powerbar]['host'], powerbars[powerbar]['port'])
tn.write(f"{action} {outlet}\r\n".encode('ascii'))
tn.close()
powerbars[powerbar]['outlets'][outlet]['state'] = action
print(f"Turned {action} powerbar {powerbar} outlet {outlet}")
except Exception as e:
print(f"Telnet error: {e}")
return jsonify({'error': 'Telnet error'}), 500
return jsonify({'state': action})
@routes.route('/<string:powerbar>/<int:outlet>/state')
def powerbar_state(powerbar, outlet):
print(f"powerbar: {powerbar}")
print(f"outlet: {outlet}")
if not vaild_power_bar(powerbar):
print("Invalid powerbar")
return jsonify({'error': 'Invalid powerbar'}), 400
if not vaild_outlet(powerbar, outlet):
print("Invalid outlet")
return jsonify({'error': 'Invalid outlet'}), 400
state = powerbars[powerbar]['outlets'][outlet].get('state', 'unknown')
return jsonify({'state': state})