Source code for peat.modules.schneider.sage.sage_telnet

"""
Telnet functions for Schneider Electric Sage RTUs.

Authors

- Aaron Lombrozo
- Christopher Goes
"""

from pathlib import Path

from peat import DeviceData, utils
from peat.protocols import Telnet

from .sage_commands import SageCommands


[docs] class SageTelnet(Telnet, SageCommands): ENCODING: str = "ascii" PRE_WRITE_SLEEP: float = 0.0 TYPE: str = "telnet" # Used for SageCommands def __init__( self, ip: str, port: int = 23, timeout: float = 5, dev: DeviceData | None = None, ) -> None: super().__init__(ip, port, timeout) self.dev: DeviceData | None = dev self.resp_dir: Path | None = None
[docs] def login(self, user: str = "Admin", passwd: str = "Telvent1!") -> bool: """ Login to the device's telnet interface. """ self.log.debug(f"Logging into {self.ip}:{self.port} as user '{user}'") try: self.read_until("login: ") self.write(user) self.read_until("Password: ") self.write(passwd) data = self.read() if "->" not in data: if "login incorrect" in data.lower(): reason = f"Incorrect credentials (user: '{user}')" else: reason = f"Unknown reason\nData: {repr(data)}" self.log.debug(f"Login failed: {reason}") self.disconnect() return False self.log.debug(f"Logged in to Sage with user '{user}' at {utils.time_now()}") self.successful_creds = (user, passwd) # Save the creds return True except (EOFError, OSError) as ex: self.log.debug(f"Exception during login: {ex}") self.disconnect() return False
[docs] def disconnect(self) -> None: if self.connected and self._comm: self.log.debug(f"Disconnected from Sage at {utils.time_now()}") try: self.write("exit") except Exception: pass super().disconnect()