ti-powerbar/app/utils.py
Matthew Frost 701c5d90cd
All checks were successful
Deploy powerbar.ti Frontend Portal / Deploy-Tinance2-Frontend-Portal-Production (push) Successful in 37s
telnet
2024-02-01 23:48:19 +01:00

60 lines
1.7 KiB
Python

import telnetlib
import re
from app.settings import powerbars, groups
def check_input_error(tn):
tn.write("/\r\n".encode('ascii'))
for _ in range(3):
print(f"Checking for input error attempt ${_}")
output = tn.read_until(b"Input error", timeout=3).decode('ascii')
if "Input error" in output:
return True
return False
def get_telnet_connection(powerbar):
tn = telnetlib.Telnet(powerbars[powerbar]['host'], powerbars[powerbar]['port'])
return tn
def run_telnet_command(powerbar, command):
try:
tn = get_telnet_connection(powerbar)
if check_input_error(tn):
tn.write(f"{command}\r\n".encode('ascii'))
return True
return False
except Exception as e:
print(f"Telnet error: {e}")
return False
def get_baytech_status_outlet_telnet(powerbar):
try:
# Create a Telnet object and connect to the host
tn = telnetlib.Telnet(powerbars[powerbar]['host'], powerbars[powerbar]['port'])
# Send the command you want to execute
command = "status"
if check_input_error(tn):
tn.write(command.encode('ascii') + b"\r\n")
else:
return None
# Read the output until you receive the prompt or a timeout occurs
output = tn.read_until(b"<prompt>", timeout=5).decode('ascii')
# Close the Telnet connection
tn.close()
pattern = r"(\d+)\)\.\.\.Outlet\s+(\d+)\s+:\s+(\w+)"
outlets = {}
matches = re.findall(pattern, output)
for match in matches:
number = int(match[1])
status = match[2]
outlets[number] = status
return outlets
except:
return None