92 lines
2.6 KiB
Python
92 lines
2.6 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})
|
|
|
|
|
|
@routes.route('/powerbars')
|
|
def powerbars_list():
|
|
return jsonify(powerbars)
|
|
|
|
@routes.route('/powerbars/<string:powerbar>')
|
|
def powerbar_outlets(powerbar):
|
|
if not vaild_power_bar(powerbar):
|
|
print("Invalid powerbar")
|
|
return jsonify({'error': 'Invalid powerbar'}), 400
|
|
|
|
return jsonify(powerbars[powerbar]['outlets'])
|