From 49acdaa8fd49e17d277a916a139fa7b14381b777 Mon Sep 17 00:00:00 2001
From: froz <brian.lenihan@gmail.com>
Date: Sun, 15 May 2016 12:20:17 -0700
Subject: [PATCH] Device Tracker - ASUSWRT: Replaced telnet with ssh (#2079)

---
 .../components/device_tracker/asuswrt.py      | 31 ++++++++-----------
 requirements_all.txt                          |  1 +
 2 files changed, 14 insertions(+), 18 deletions(-)

diff --git a/homeassistant/components/device_tracker/asuswrt.py b/homeassistant/components/device_tracker/asuswrt.py
index b4784505d2d..dd0c43efb2f 100644
--- a/homeassistant/components/device_tracker/asuswrt.py
+++ b/homeassistant/components/device_tracker/asuswrt.py
@@ -6,7 +6,6 @@ https://home-assistant.io/components/device_tracker.asuswrt/
 """
 import logging
 import re
-import telnetlib
 import threading
 from datetime import timedelta
 
@@ -19,6 +18,7 @@ from homeassistant.util import Throttle
 MIN_TIME_BETWEEN_SCANS = timedelta(seconds=5)
 
 _LOGGER = logging.getLogger(__name__)
+REQUIREMENTS = ['pexpect==4.0.1']
 
 _LEASES_REGEX = re.compile(
     r'\w+\s' +
@@ -102,24 +102,19 @@ class AsusWrtDeviceScanner(object):
 
     def get_asuswrt_data(self):
         """Retrieve data from ASUSWRT and return parsed result."""
+        from pexpect import pxssh
         try:
-            telnet = telnetlib.Telnet(self.host)
-            telnet.read_until(b'login: ')
-            telnet.write((self.username + '\n').encode('ascii'))
-            telnet.read_until(b'Password: ')
-            telnet.write((self.password + '\n').encode('ascii'))
-            prompt_string = telnet.read_until(b'#').split(b'\n')[-1]
-            telnet.write('ip neigh\n'.encode('ascii'))
-            neighbors = telnet.read_until(prompt_string).split(b'\n')[1:-1]
-            telnet.write('cat /var/lib/misc/dnsmasq.leases\n'.encode('ascii'))
-            leases_result = telnet.read_until(prompt_string).split(b'\n')[1:-1]
-            telnet.write('exit\n'.encode('ascii'))
-        except EOFError:
-            _LOGGER.exception("Unexpected response from router")
-            return
-        except ConnectionRefusedError:
-            _LOGGER.exception("Connection refused by router," +
-                              " is telnet enabled?")
+            ssh = pxssh.pxssh()
+            ssh.login(self.host, self.username, self.password)
+            ssh.sendline('ip neigh')
+            ssh.prompt()
+            neighbors = ssh.before.split(b'\n')[1:-1]
+            ssh.sendline('cat /var/lib/misc/dnsmasq.leases')
+            ssh.prompt()
+            leases_result = ssh.before.split(b'\n')[1:-1]
+            ssh.logout()
+        except pxssh.ExceptionPxssh as exc:
+            _LOGGER.exception('Unexpected response from router: %s', exc)
             return
 
         devices = {}
diff --git a/requirements_all.txt b/requirements_all.txt
index d874db1a91b..7b9b57ee158 100644
--- a/requirements_all.txt
+++ b/requirements_all.txt
@@ -171,6 +171,7 @@ paho-mqtt==1.1
 panasonic_viera==0.2
 
 # homeassistant.components.device_tracker.aruba
+# homeassistant.components.device_tracker.asuswrt
 pexpect==4.0.1
 
 # homeassistant.components.light.hue
-- 
GitLab