parent
d649cbfb18
commit
79c240c2f5
4 changed files with 39 additions and 10 deletions
|
@ -3,6 +3,16 @@ from app.views import routes
|
||||||
from flask import jsonify
|
from flask import jsonify
|
||||||
from app.settings import powerbars
|
from app.settings import powerbars
|
||||||
from app.utils import get_baytech_status_outlet
|
from app.utils import get_baytech_status_outlet
|
||||||
|
from flask_socketio import SocketIO, emit
|
||||||
|
|
||||||
|
socketio = SocketIO(engineio_logger=True, logger=True, cors_allowed_origins="*")
|
||||||
|
|
||||||
|
@socketio.on('connect', namespace='/powerupdates')
|
||||||
|
def connect_handler():
|
||||||
|
print('connected')
|
||||||
|
|
||||||
|
emit('response', {'meta': 'WS connected'})
|
||||||
|
|
||||||
|
|
||||||
def create_app():
|
def create_app():
|
||||||
# create and configure the app
|
# create and configure the app
|
||||||
|
@ -25,6 +35,7 @@ def create_app():
|
||||||
except:
|
except:
|
||||||
print(f"Failed to get outlet status from powerbar {powerbar_name}")
|
print(f"Failed to get outlet status from powerbar {powerbar_name}")
|
||||||
continue
|
continue
|
||||||
|
socketio.init_app(app)
|
||||||
return app
|
return app
|
||||||
|
|
||||||
app = create_app()
|
app = create_app()
|
||||||
|
@ -37,4 +48,3 @@ def not_authorised(e):
|
||||||
def internal_server_error(e):
|
def internal_server_error(e):
|
||||||
return jsonify(error="Internal server error"), 500
|
return jsonify(error="Internal server error"), 500
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -203,11 +203,23 @@ input:checked + .slider:before {
|
||||||
|
|
||||||
|
|
||||||
<!-- Bootstrap JS -->
|
<!-- Bootstrap JS -->
|
||||||
<script type="text/javascript" src="node_modules/mdbootstrap/js/jquery.min.js"></script>
|
|
||||||
<script type="text/javascript" src="node_modules/mdbootstrap/js/popper.min.js"></script>
|
|
||||||
<script type="text/javascript" src="node_modules/mdbootstrap/js/bootstrap.min.js"></script>
|
|
||||||
<script type="text/javascript" src="node_modules/mdbootstrap/js/mdb.min.js"></script>
|
|
||||||
|
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.7.2/socket.io.js"></script>
|
||||||
|
<script>
|
||||||
|
document.addEventListener('DOMContentLoaded', function () {
|
||||||
|
// Connect to the /powerupdates namespace
|
||||||
|
var socket = io.connect('http://' + document.domain + ':' + location.port + '/powerupdates');
|
||||||
|
|
||||||
|
|
||||||
|
// Listen for messages from the server in the /powerupdates namespace
|
||||||
|
socket.on('message_from_server', function (message) {
|
||||||
|
console.log('Received message from server in /powerupdates namespace:', message);
|
||||||
|
// Handle the received message as needed
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
function getUrl(url) {
|
function getUrl(url) {
|
||||||
return fetch(url)
|
return fetch(url)
|
||||||
|
@ -222,7 +234,6 @@ input:checked + .slider:before {
|
||||||
.then(data => {
|
.then(data => {
|
||||||
// Handle the response data
|
// Handle the response data
|
||||||
console.log('Response data:', data);
|
console.log('Response data:', data);
|
||||||
location.reload(); // Refresh the page
|
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch(error => {
|
||||||
console.error('An error occurred while making GET request:', error);
|
console.error('An error occurred while making GET request:', error);
|
||||||
|
@ -267,3 +278,4 @@ input:checked + .slider:before {
|
||||||
// Add event listener to the search input
|
// Add event listener to the search input
|
||||||
document.getElementById('searchInput').addEventListener('input', search);
|
document.getElementById('searchInput').addEventListener('input', search);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
10
app/views.py
10
app/views.py
|
@ -3,6 +3,7 @@ from app.settings import powerbars, groups
|
||||||
from flask import jsonify
|
from flask import jsonify
|
||||||
import telnetlib
|
import telnetlib
|
||||||
import time
|
import time
|
||||||
|
import app
|
||||||
|
|
||||||
routes = Blueprint('routes', __name__)
|
routes = Blueprint('routes', __name__)
|
||||||
|
|
||||||
|
@ -111,6 +112,7 @@ def powerbar_control(powerbar, outlet, action):
|
||||||
tn = get_telnet_connection(powerbar)
|
tn = get_telnet_connection(powerbar)
|
||||||
run_telnet_command(powerbar,f"{action} {outlet}")
|
run_telnet_command(powerbar,f"{action} {outlet}")
|
||||||
powerbars[powerbar]['outlets'][outlet]['state'] = action
|
powerbars[powerbar]['outlets'][outlet]['state'] = action
|
||||||
|
app.socketio.emit('power-event',{'powebar': powerbar,'outlet' : outlet, 'action' : action}, namespace='/powerupdates')
|
||||||
print(f"Turned {action} powerbar {powerbar} outlet {outlet}")
|
print(f"Turned {action} powerbar {powerbar} outlet {outlet}")
|
||||||
except Exception as E:
|
except Exception as E:
|
||||||
print(f"Telnet error: {E}")
|
print(f"Telnet error: {E}")
|
||||||
|
@ -119,13 +121,14 @@ def powerbar_control(powerbar, outlet, action):
|
||||||
if action == 'cycle':
|
if action == 'cycle':
|
||||||
tn = get_telnet_connection(powerbar)
|
tn = get_telnet_connection(powerbar)
|
||||||
print(f"Turning Off powerbar {powerbar} outlet {outlet}")
|
print(f"Turning Off powerbar {powerbar} outlet {outlet}")
|
||||||
powerbars[powerbar]['outlets'][outlet]['state'] = "off"
|
|
||||||
run_telnet_command(powerbar,f"off {outlet}")
|
run_telnet_command(powerbar,f"off {outlet}")
|
||||||
|
powerbars[powerbar]['outlets'][outlet]['state'] = "off"
|
||||||
|
app.socketio.emit('power-event',{'powebar': powerbar,'outlet' : outlet, 'action' : action}, namespace='/powerupdates')
|
||||||
time.sleep(5)
|
time.sleep(5)
|
||||||
print(f"Turning On powerbar {powerbar} outlet {outlet}")
|
print(f"Turning On powerbar {powerbar} outlet {outlet}")
|
||||||
run_telnet_command(powerbar,f"on {outlet}")
|
run_telnet_command(powerbar,f"on {outlet}")
|
||||||
powerbars[powerbar]['outlets'][outlet]['state'] = "on"
|
powerbars[powerbar]['outlets'][outlet]['state'] = "on"
|
||||||
|
app.socketio.emit('power-event',{'powebar': powerbar,'outlet' : outlet, 'action' : action}, namespace='/powerupdates')
|
||||||
if action == 'toggle':
|
if action == 'toggle':
|
||||||
print(powerbars[powerbar]['outlets'][outlet]['state'])
|
print(powerbars[powerbar]['outlets'][outlet]['state'])
|
||||||
|
|
||||||
|
@ -133,13 +136,14 @@ def powerbar_control(powerbar, outlet, action):
|
||||||
tn = get_telnet_connection(powerbar)
|
tn = get_telnet_connection(powerbar)
|
||||||
print(f"Turning Off powerbar {powerbar} outlet {outlet}")
|
print(f"Turning Off powerbar {powerbar} outlet {outlet}")
|
||||||
run_telnet_command(powerbar,f"off {outlet}")
|
run_telnet_command(powerbar,f"off {outlet}")
|
||||||
|
|
||||||
powerbars[powerbar]['outlets'][outlet]['state'] = "off"
|
powerbars[powerbar]['outlets'][outlet]['state'] = "off"
|
||||||
|
app.socketio.emit('power-event',{'powebar': powerbar,'outlet' : outlet, 'action' : action}, namespace='/powerupdates')
|
||||||
elif powerbars[powerbar]['outlets'][outlet]['state'] == "off":
|
elif powerbars[powerbar]['outlets'][outlet]['state'] == "off":
|
||||||
tn = get_telnet_connection(powerbar)
|
tn = get_telnet_connection(powerbar)
|
||||||
print(f"Turning On powerbar {powerbar} outlet {outlet}")
|
print(f"Turning On powerbar {powerbar} outlet {outlet}")
|
||||||
run_telnet_command(powerbar,f"on {outlet}")
|
run_telnet_command(powerbar,f"on {outlet}")
|
||||||
powerbars[powerbar]['outlets'][outlet]['state'] = "on"
|
powerbars[powerbar]['outlets'][outlet]['state'] = "on"
|
||||||
|
app.socketio.emit('power-event',{'powebar': powerbar,'outlet' : outlet, 'action' : action}, namespace='/powerupdates')
|
||||||
|
|
||||||
return jsonify({'state': powerbars[powerbar]['outlets'][outlet].get('state', 'unknown')})
|
return jsonify({'state': powerbars[powerbar]['outlets'][outlet].get('state', 'unknown')})
|
||||||
|
|
||||||
|
|
|
@ -1,2 +1,5 @@
|
||||||
flask
|
flask
|
||||||
telnetlib3
|
telnetlib3
|
||||||
|
flask-socketio
|
||||||
|
gunicorn
|
||||||
|
gevent
|
Loading…
Reference in a new issue