powebar polling
All checks were successful
Deploy powerbar.ti Frontend Portal / Deploy-Tinance2-Frontend-Portal-Production (push) Successful in 39s
All checks were successful
Deploy powerbar.ti Frontend Portal / Deploy-Tinance2-Frontend-Portal-Production (push) Successful in 39s
This commit is contained in:
parent
16c6447aee
commit
ac0e14fd6b
6 changed files with 55 additions and 15 deletions
|
@ -5,27 +5,23 @@ from app.settings import powerbars
|
|||
from app.utils import get_baytech_status_outlet_telnet
|
||||
from flask_socketio import SocketIO, emit
|
||||
from gevent import monkey
|
||||
from app.jobs import scheduler
|
||||
|
||||
socketio = SocketIO(async_mode="gevent", logger=True, engineio_logger=True, cors_allowed_origins="*")
|
||||
|
||||
@socketio.on('connect', namespace='/powerupdates')
|
||||
def connect_handler():
|
||||
print('connected')
|
||||
|
||||
emit('response', {'meta': 'WS connected'})
|
||||
|
||||
|
||||
def create_app():
|
||||
# create and configure the app
|
||||
app = Flask(__name__)
|
||||
app.config.from_pyfile('settings.py')
|
||||
app.register_blueprint(routes)
|
||||
def powerbar_status():
|
||||
for powerbar_name, powerbar_info in powerbars.items():
|
||||
print(f"Checking powerbar state {powerbar_name}")
|
||||
if powerbar_info['type'] == 'baytech':
|
||||
try:
|
||||
print("Is a baytech powerbar, getting outlet status")
|
||||
if powerbar_info['method'] == "telnet":
|
||||
if powerbar_info['method'] in ["telnet", "batch_telnet"]:
|
||||
outlets = get_baytech_status_outlet_telnet(powerbar_name)
|
||||
|
||||
try:
|
||||
|
@ -38,10 +34,20 @@ def create_app():
|
|||
except:
|
||||
print(f"Failed to get outlet status from powerbar {powerbar_name}")
|
||||
continue
|
||||
return
|
||||
|
||||
def create_app():
|
||||
# create and configure the app
|
||||
app = Flask(__name__)
|
||||
app.config.from_pyfile('settings.py')
|
||||
app.register_blueprint(routes)
|
||||
powerbar_status()
|
||||
scheduler.init_app(app)
|
||||
socketio.init_app(app)
|
||||
return app
|
||||
|
||||
app = create_app()
|
||||
scheduler.start()
|
||||
|
||||
@app.errorhandler(403)
|
||||
def not_authorised(e):
|
||||
|
@ -53,3 +59,4 @@ def internal_server_error(e):
|
|||
|
||||
if not app.config["DEBUG"]:
|
||||
monkey.patch_all()
|
||||
|
||||
|
|
35
app/jobs.py
Normal file
35
app/jobs.py
Normal file
|
@ -0,0 +1,35 @@
|
|||
from flask_apscheduler import APScheduler
|
||||
from app.settings import powerbars
|
||||
from app.utils import run_telnet_command
|
||||
|
||||
scheduler = APScheduler()
|
||||
|
||||
@scheduler.task('interval', id='do_periodic_serial_job', seconds=3)
|
||||
def periodic_serial_job():
|
||||
print("Running Sync Job")
|
||||
for powerbar in powerbars:
|
||||
|
||||
on_command = "On "
|
||||
off_command = "Off "
|
||||
|
||||
print(f"Checking powerbar state {powerbar}")
|
||||
for outlet in powerbars[powerbar]['outlets']:
|
||||
outlet_status = powerbars[powerbar]['outlets'][outlet].get('state', 'unknown')
|
||||
|
||||
if outlet_status is not "unknown":
|
||||
if outlet_status == "on":
|
||||
on_command += f"{outlet},"
|
||||
|
||||
if outlet_status == "off":
|
||||
off_command += f"{outlet},"
|
||||
|
||||
print(f"Turning on outlets: {on_command.rstrip(',')}")
|
||||
|
||||
if on_command is not "On ":
|
||||
print("Running On command")
|
||||
# run_telnet_command(powerbar, on_command.rstrip(','))
|
||||
|
||||
print(f"Turning off outlets: {off_command.rstrip(',')}")
|
||||
if off_command is not "Off ":
|
||||
print("Running Off command")
|
||||
# run_telnet_command(powerbar, off_command.rstrip(','))
|
|
@ -22,7 +22,7 @@ powerbars = {
|
|||
"password" : "admin",
|
||||
"port" : 2167,
|
||||
"type" : "baytech",
|
||||
"method" : "telnet",
|
||||
"method" : "batch_telnet",
|
||||
"description" : "Powerbar Controlling Aux Space",
|
||||
"outlets" : {
|
||||
4 : { "name" : "Power solderlane" },
|
||||
|
@ -45,7 +45,7 @@ powerbars = {
|
|||
"password" : "admin",
|
||||
"port" : 2168,
|
||||
"type" : "baytech",
|
||||
"method" : "telnet",
|
||||
"method" : "batch_telnet",
|
||||
"description" : "Powerbar Controlling Main Space",
|
||||
"outlets" : {
|
||||
9 : { "name" : "3D Printers" },
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -2,7 +2,6 @@ from flask import render_template, Blueprint, request
|
|||
from app.settings import powerbars, groups
|
||||
from app.utils import run_telnet_command
|
||||
from flask import jsonify
|
||||
import telnetlib
|
||||
import time
|
||||
import app
|
||||
|
||||
|
@ -11,8 +10,6 @@ routes = Blueprint('routes', __name__)
|
|||
# Create a dictionary to store the active telnet connections
|
||||
active_telnet_connections = {}
|
||||
|
||||
|
||||
|
||||
def find_group_by_name(name):
|
||||
for group in groups:
|
||||
if group["name"] == name:
|
||||
|
@ -25,7 +22,7 @@ def vaild_power_bar(powerbar):
|
|||
else:
|
||||
return False
|
||||
|
||||
def vaild_outlet (powerbar, outlet):
|
||||
def vaild_outlet(powerbar, outlet):
|
||||
if outlet in powerbars[powerbar]['outlets']:
|
||||
return True
|
||||
else:
|
||||
|
|
|
@ -2,4 +2,5 @@ flask
|
|||
telnetlib3
|
||||
flask-socketio
|
||||
gunicorn
|
||||
gevent
|
||||
gevent
|
||||
Flask-APScheduler
|
Loading…
Reference in a new issue