telnet
All checks were successful
Deploy powerbar.ti Frontend Portal / Deploy-Tinance2-Frontend-Portal-Production (push) Successful in 36s

This commit is contained in:
Matthew Frost 2024-02-01 11:58:27 +01:00
parent ffb04c0f3e
commit 40b31110e4
5 changed files with 33 additions and 155 deletions

View file

@ -2,7 +2,7 @@ from flask import Flask
from app.views import routes 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_telnet
from flask_socketio import SocketIO, emit from flask_socketio import SocketIO, emit
from gevent import monkey from gevent import monkey
@ -25,7 +25,9 @@ def create_app():
if powerbar_info['type'] == 'baytech': if powerbar_info['type'] == 'baytech':
try: try:
print("Is a baytech powerbar, getting outlet status") print("Is a baytech powerbar, getting outlet status")
outlets = get_baytech_status_outlet(powerbar_info['host'], powerbar_info['port']) if powerbar_info['method'] == "telnet":
outlets = get_baytech_status_outlet_telnet(powerbar_info['host'], powerbar_info['port'])
try: try:
for outlet_id, outlet_info in powerbar_info['outlets'].items(): for outlet_id, outlet_info in powerbar_info['outlets'].items():
powerbar_info['outlets'][outlet_id]['state'] = outlets[outlet_id].lower() powerbar_info['outlets'][outlet_id]['state'] = outlets[outlet_id].lower()

View file

@ -20,6 +20,7 @@ powerbars = {
"host" : "10.209.10.111", "host" : "10.209.10.111",
"port" : 3696, "port" : 3696,
"type" : "baytech", "type" : "baytech",
"method" : "telnet",
"description" : "Powerbar Controlling Aux Space", "description" : "Powerbar Controlling Aux Space",
"outlets" : { "outlets" : {
4 : { "name" : "Power solderlane" }, 4 : { "name" : "Power solderlane" },
@ -40,6 +41,7 @@ powerbars = {
"host" : "10.209.10.111", "host" : "10.209.10.111",
"port" : 3697, "port" : 3697,
"type" : "baytech", "type" : "baytech",
"method" : "telnet",
"description" : "Powerbar Controlling Main Space", "description" : "Powerbar Controlling Main Space",
"outlets" : { "outlets" : {
9 : { "name" : "3D Printers" }, 9 : { "name" : "3D Printers" },

View file

@ -1,7 +1,7 @@
import telnetlib import telnetlib
import re import re
def get_baytech_status_outlet(hostname,port): def get_baytech_status_outlet_telnet(hostname,port):
try: try:
# Create a Telnet object and connect to the host # Create a Telnet object and connect to the host
tn = telnetlib.Telnet(hostname, port) tn = telnetlib.Telnet(hostname, port)

View file

@ -126,8 +126,10 @@ def powerbar_control(powerbar, outlet, action):
if action in ['on', 'off']: if action in ['on', 'off']:
try: try:
print(f"Turning {action} powerbar {powerbar} outlet {outlet}") print(f"Turning {action} powerbar {powerbar} outlet {outlet}")
tn = get_telnet_connection(powerbar)
run_telnet_command(powerbar,f"{action} {outlet}") if powerbars[powerbar]['method'] == "telnet":
run_telnet_command(powerbar,f"{action} {outlet}")
powerbars[powerbar]['outlets'][outlet]['state'] = action powerbars[powerbar]['outlets'][outlet]['state'] = action
app.socketio.emit('power-event',{'powerbar': powerbar, 'outlet' : outlet, 'action' : action}, namespace='/powerupdates') app.socketio.emit('power-event',{'powerbar': powerbar, 'outlet' : outlet, 'action' : action}, namespace='/powerupdates')
print(f"Turned {action} powerbar {powerbar} outlet {outlet}") print(f"Turned {action} powerbar {powerbar} outlet {outlet}")
@ -136,31 +138,39 @@ def powerbar_control(powerbar, outlet, action):
return jsonify({'error': 'Telnet error'}), 500 return jsonify({'error': 'Telnet error'}), 500
if action == 'cycle': if action == 'cycle':
tn = get_telnet_connection(powerbar)
print(f"Turning Off powerbar {powerbar} outlet {outlet}")
run_telnet_command(powerbar,f"off {outlet}") run_telnet_command(powerbar,f"off {outlet}")
if powerbars[powerbar]['method'] == "telnet":
print(f"Turning Off powerbar {powerbar} outlet {outlet}")
powerbars[powerbar]['outlets'][outlet]['state'] = "off" powerbars[powerbar]['outlets'][outlet]['state'] = "off"
app.socketio.emit('power-event',{'powerbar': powerbar, 'outlet' : outlet, 'action' : action}, namespace='/powerupdates') app.socketio.emit('power-event',{'powerbar': 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}") if powerbars[powerbar]['method'] == "telnet":
powerbars[powerbar]['outlets'][outlet]['state'] = "on" run_telnet_command(powerbar,f"on {outlet}")
powerbars[powerbar]['outlets'][outlet]['state'] = "on"
app.socketio.emit('power-event',{'powerbar': powerbar, 'outlet' : outlet, 'action' : action}, namespace='/powerupdates') app.socketio.emit('power-event',{'powerbar': 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'])
if powerbars[powerbar]['outlets'][outlet]['state'] == "on": if powerbars[powerbar]['outlets'][outlet]['state'] == "on":
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}") if powerbars[powerbar]['method'] == "telnet":
run_telnet_command(powerbar,f"off {outlet}")
powerbars[powerbar]['outlets'][outlet]['state'] = "off" powerbars[powerbar]['outlets'][outlet]['state'] = "off"
app.socketio.emit('power-event',{'powerbar': powerbar, 'outlet' : outlet, 'action' : action}, namespace='/powerupdates') app.socketio.emit('power-event',{'powerbar': 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)
print(f"Turning On powerbar {powerbar} outlet {outlet}") print(f"Turning On powerbar {powerbar} outlet {outlet}")
run_telnet_command(powerbar,f"on {outlet}") if powerbars[powerbar]['method'] == "telnet":
powerbars[powerbar]['outlets'][outlet]['state'] = "on" run_telnet_command(powerbar,f"on {outlet}")
powerbars[powerbar]['outlets'][outlet]['state'] = "on"
app.socketio.emit('power-event',{'powerbar': powerbar, 'outlet' : outlet, 'action' : action}, namespace='/powerupdates') app.socketio.emit('power-event',{'powerbar': 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')})
@ -240,11 +250,13 @@ def powebar_group_action(group, action):
try: try:
for device in group["devices"]: for device in group["devices"]:
powerbar = device["powerbar"] powerbar = device["powerbar"]
tn = get_telnet_connection(powerbar)
print(f"Powerbar: {powerbar}") print(f"Powerbar: {powerbar}")
outlets = ",".join([str(x) for x in device['outlets']]) outlets = ",".join([str(x) for x in device['outlets']])
print(f"Turning {action} powerbar {powerbar} outlet {outlets}") print(f"Turning {action} powerbar {powerbar} outlet {outlets}")
run_telnet_command(powerbar,f"{action} {outlets}")
if powerbars[powerbar]['method'] == "telnet":
run_telnet_command(powerbar,f"{action} {outlets}")
for outlet in device['outlets']: for outlet in device['outlets']:
if outlet in powerbars[powerbar]['outlets']: if outlet in powerbars[powerbar]['outlets']:
powerbars[powerbar]['outlets'][outlet]['state'] = action powerbars[powerbar]['outlets'][outlet]['state'] = action

View file

@ -1,138 +0,0 @@
#!/usr/bin/env python3
from __future__ import print_function
from bar import BayTechPowerBar
from httpbar import HTTPPowerBar
# This is the main config for TechInc (http://techinc.nl)
# The config for the other bar can be found in configs/techinc-west.py
bars = []
FIRST_BAR = BayTechPowerBar('/dev/ttyS0', name='MLP')
AUX_BAR = HTTPPowerBar(host='http://powerbar2.ti:5000', name='AUX')
bars += [
FIRST_BAR,
AUX_BAR
]
def make_bar(bar, name, ident=None):
if ident is None:
ident = name
__s = bar.make_socket(name, ident)
globals()[name] = __s
bar.sockets[name] = __s
# Bar 1
make_bar(FIRST_BAR, 'LIGHT_MAKERTABLE', 4)
make_bar(FIRST_BAR, 'LIGHT_TABLE', 5)
make_bar(FIRST_BAR, 'LIGHT_HAM', 6)
make_bar(FIRST_BAR, 'LIGHT_ENTRANCE', 7)
make_bar(FIRST_BAR, 'LIGHT_KITCHEN', 8)
make_bar(FIRST_BAR, 'LIGHT_WHEEL', 9)
make_bar(FIRST_BAR, 'LIGHT_SOFA', 10)
make_bar(FIRST_BAR, 'LIGHT_KITCHEN_SPOTS', 11)
make_bar(FIRST_BAR, 'LEDWALL', 12)
make_bar(FIRST_BAR, 'AUDIO_AMPLIFIER', 13)
make_bar(FIRST_BAR, 'AUDIO_MIXER', 14)
make_bar(FIRST_BAR, 'LIGHT_MAKERLANE', 15)
make_bar(FIRST_BAR, 'RADIO_LANE_CTRL_OUTLETS', 16)
make_bar(FIRST_BAR, 'MONITOR_3D_1', 17)
make_bar(FIRST_BAR, 'MONITOR_3D_2', 18)
#make_bar(FIRST_BAR, 'PRINTER', 18)
make_bar(FIRST_BAR, 'MONITOR_AV_1', 19)
make_bar(FIRST_BAR, 'MONITOR_AV_2', 20)
make_bar(AUX_BAR, 'W_POWER_NW_TABLE')
make_bar(AUX_BAR, 'W_POWER_SW_TABLE')
make_bar(AUX_BAR, 'W_POWER_MAIN_TABLE')
make_bar(AUX_BAR, 'W_POWER_PILLAR')
make_bar(AUX_BAR, 'W_AIR_FAN')
make_bar(AUX_BAR, 'W_LIGHT_TABLE')
make_bar(AUX_BAR, 'W_LIGHT_TL_DOOR')
make_bar(AUX_BAR, 'W_LIGHT_SOLDER')
make_bar(AUX_BAR, 'W_LIGHT_SOLDER_2')
make_bar(AUX_BAR, 'W_LIGHT_GLASS')
# Groups make it easier to handle multiple sockets - they are refcounted
# so enabled both 'general' and 'lightwest' will make all the shared sockets
# have a refcount of 'two'. Just disabling the 'general' socket will not
# actually turn off shared sockets. If the global IGNORE_REFCOUNT boolean is set
# however, they are just turned off.
groups = {
'general' : [LIGHT_ENTRANCE, LIGHT_KITCHEN, LIGHT_SOFA, LIGHT_TABLE, LIGHT_WHEEL],
'hamshack' : [LIGHT_HAM],
'kitchenspots': [LIGHT_KITCHEN_SPOTS],
'audio' : [AUDIO_AMPLIFIER, AUDIO_MIXER],
'displays' : [MONITOR_AV_1, MONITOR_AV_2, MONITOR_3D_1, MONITOR_3D_2],
'av' : [MONITOR_AV_1, MONITOR_AV_2],
'lighteast' : [LIGHT_MAKERLANE, LIGHT_MAKERTABLE, LIGHT_TABLE, LIGHT_HAM,
LIGHT_ENTRANCE, LIGHT_KITCHEN, LIGHT_WHEEL, LIGHT_SOFA,
LIGHT_KITCHEN_SPOTS, LEDWALL],
'makerlane' : [LIGHT_MAKERLANE, LIGHT_MAKERTABLE, MONITOR_3D_1, MONITOR_3D_2],
'soldering' : [W_POWER_NW_TABLE, W_POWER_SW_TABLE, W_LIGHT_SOLDER, W_LIGHT_SOLDER_2],
'powerwest' : [W_POWER_NW_TABLE, W_POWER_MAIN_TABLE, W_POWER_SW_TABLE, W_POWER_PILLAR],
'lightwest' : [W_LIGHT_TABLE, W_LIGHT_GLASS, W_LIGHT_SOLDER, W_LIGHT_SOLDER_2],
'tlwest' : [W_LIGHT_TL_DOOR],
'airfan' : [W_AIR_FAN],
'led' : [LEDWALL],
}
groups_state = {}
for _ in groups.keys():
groups_state[_] = None
GROUPS_LIGHT = ['general', 'makerlane', 'lightwest', 'craft']
# Presets will execute 'On' and 'Off', always. Regardless of the parameters. So
# you cannot 'turn on/off' a preset.
presets = {
'lightsoff' : {
'Off' : GROUPS_LIGHT + ['airfan'] + ['tlwest'],
'On' : [],
},
'lightson' : {
'Off' : [],
'On' : GROUPS_LIGHT,
},
'alloff' :{
'Off' : list(groups.keys()),
},
'allon' :{
'On' : list(groups.keys()),
},
'mainspaceon' : {
'Off' : [],
'On' : ['general','craft','audio','makerlane','av','audio'],
},
'auxspaceon' : {
'Off' : [],
'On' : ['soldering','powerwest','lightwest'],
},
'social' : {
'Off' : [],
'On' : ['general','craft','airfan','audio','lightwest','displays','av','audio','soldering','powerwest','makerlane'],
},
'presentation' : {
'Off' : GROUPS_LIGHT + ['airfan'],
'On' : ['audio'],
},
'vacuuming' : {
'Off' : [],
'On' : GROUPS_LIGHT,
},
}