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('///') 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('///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/') def powerbar_outlets(powerbar): if not vaild_power_bar(powerbar): print("Invalid powerbar") return jsonify({'error': 'Invalid powerbar'}), 400 return jsonify(powerbars[powerbar]['outlets'])