From b3ef2bd2d95e2bb486c811e4aa6d4b067d0e826c Mon Sep 17 00:00:00 2001 From: carlosmgr Date: Mon, 1 Feb 2016 12:23:20 +0000 Subject: [PATCH 1/5] Update aruba.py --- .../components/device_tracker/aruba.py | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/homeassistant/components/device_tracker/aruba.py b/homeassistant/components/device_tracker/aruba.py index 82183e1495c..63ace67212e 100644 --- a/homeassistant/components/device_tracker/aruba.py +++ b/homeassistant/components/device_tracker/aruba.py @@ -11,7 +11,7 @@ import logging from datetime import timedelta import re import threading -import telnetlib +import pexpect from homeassistant.const import CONF_HOST, CONF_USERNAME, CONF_PASSWORD from homeassistant.helpers import validate_config @@ -94,15 +94,18 @@ class ArubaDeviceScanner(object): def get_aruba_data(self): """ Retrieve data from Aruba Access Point and return parsed result. """ try: - telnet = telnetlib.Telnet(self.host) - telnet.read_until(b'User: ') - telnet.write((self.username + '\r\n').encode('ascii')) - telnet.read_until(b'Password: ') - telnet.write((self.password + '\r\n').encode('ascii')) - telnet.read_until(b'#') - telnet.write(('show clients\r\n').encode('ascii')) - devices_result = telnet.read_until(b'#').split(b'\r\n') - telnet.write('exit\r\n'.encode('ascii')) + connect = "ssh {}@{}" + ssh = pexpect.spawn (connect.format(self.username, self.host)) + query = ssh.expect(['continue connecting (yes/no)?', 'password:']) + if query == 0: + ssh.sendline('yes') + ssh.expect ('password:') + ssh.sendline (self.password ) + ssh.expect ('#') + ssh.sendline ('show clients') + ssh.expect ('#') + devices_result = ssh.before.split(b'\r\n') + ssh.sendline ('exit') except EOFError: _LOGGER.exception("Unexpected response from router") return From e91c8e414350cddc13119909896c3e41301999c7 Mon Sep 17 00:00:00 2001 From: carlosmgr Date: Tue, 2 Feb 2016 21:49:11 +0000 Subject: [PATCH 2/5] ssh aruba.py req pexpect --- .../components/device_tracker/aruba.py | 53 +++++++++++-------- requirements_all.txt | 3 ++ 2 files changed, 35 insertions(+), 21 deletions(-) diff --git a/homeassistant/components/device_tracker/aruba.py b/homeassistant/components/device_tracker/aruba.py index 63ace67212e..6f525f3e077 100644 --- a/homeassistant/components/device_tracker/aruba.py +++ b/homeassistant/components/device_tracker/aruba.py @@ -11,7 +11,7 @@ import logging from datetime import timedelta import re import threading -import pexpect + from homeassistant.const import CONF_HOST, CONF_USERNAME, CONF_PASSWORD from homeassistant.helpers import validate_config @@ -21,6 +21,7 @@ from homeassistant.components.device_tracker import DOMAIN # Return cached results if last scan was less then this time ago MIN_TIME_BETWEEN_SCANS = timedelta(seconds=10) +REQUIREMENTS = ['pexpect==4.0.1'] _LOGGER = logging.getLogger(__name__) _DEVICES_REGEX = re.compile( @@ -93,27 +94,37 @@ class ArubaDeviceScanner(object): def get_aruba_data(self): """ Retrieve data from Aruba Access Point and return parsed result. """ - try: - connect = "ssh {}@{}" - ssh = pexpect.spawn (connect.format(self.username, self.host)) - query = ssh.expect(['continue connecting (yes/no)?', 'password:']) - if query == 0: - ssh.sendline('yes') - ssh.expect ('password:') - ssh.sendline (self.password ) - ssh.expect ('#') - ssh.sendline ('show clients') - ssh.expect ('#') - devices_result = ssh.before.split(b'\r\n') - ssh.sendline ('exit') - except EOFError: - _LOGGER.exception("Unexpected response from router") - return - except ConnectionRefusedError: - _LOGGER.exception("Connection refused by router," + - " is telnet enabled?") - return + import pexpect + connect = "ssh {}@{}" + ssh = pexpect.spawn (connect.format(self.username, self.host)) + query = ssh.expect(['password:',pexpect.TIMEOUT,pexpect.EOF,'continue connecting (yes/no)?', + 'Host key verification failed.','Connection refused','Connection timed out'],timeout=120) + if query == 1: + _LOGGER.error("Timeout") + return + elif query == 2: + _LOGGER.error("Unexpected response from router") + return + elif query == 3: + ssh.sendline('yes') + ssh.expect ('password:') + elif query == 4: + _LOGGER.error("Host key Changed") + return + elif query == 5: + #_LOGGER.error("Connection refused by server") + return + elif query == 6: + #_LOGGER.error("Connection timed out") + return + ssh.sendline (self.password ) + ssh.expect ('#') + ssh.sendline ('show clients') + ssh.expect ('#') + devices_result = ssh.before.split(b'\r\n') + ssh.sendline ('exit') + devices = {} for device in devices_result: match = _DEVICES_REGEX.search(device.decode('utf-8')) diff --git a/requirements_all.txt b/requirements_all.txt index 8435ffd01d5..9e0e159a1d2 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -114,6 +114,9 @@ orvibo==1.1.1 # homeassistant.components.mqtt paho-mqtt==1.1 +# homeassistant.components.device_tracker.aruba +pexpect==4.0.1 + # homeassistant.components.light.hue phue==0.8 From 7f87df20c239a868b2f6893c3b2ce18a700fe4fb Mon Sep 17 00:00:00 2001 From: carlosmgr Date: Tue, 2 Feb 2016 22:40:04 +0000 Subject: [PATCH 3/5] ssh aruba --- .../components/device_tracker/aruba.py | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/homeassistant/components/device_tracker/aruba.py b/homeassistant/components/device_tracker/aruba.py index 6f525f3e077..f901d798c26 100644 --- a/homeassistant/components/device_tracker/aruba.py +++ b/homeassistant/components/device_tracker/aruba.py @@ -12,7 +12,6 @@ from datetime import timedelta import re import threading - from homeassistant.const import CONF_HOST, CONF_USERNAME, CONF_PASSWORD from homeassistant.helpers import validate_config from homeassistant.util import Throttle @@ -45,6 +44,7 @@ def get_scanner(hass, config): class ArubaDeviceScanner(object): """ This class queries a Aruba Acces Point for connected devices. """ + def __init__(self, config): self.host = config[CONF_HOST] self.username = config[CONF_USERNAME] @@ -97,10 +97,10 @@ class ArubaDeviceScanner(object): import pexpect connect = "ssh {}@{}" - ssh = pexpect.spawn (connect.format(self.username, self.host)) - query = ssh.expect(['password:',pexpect.TIMEOUT,pexpect.EOF,'continue connecting (yes/no)?', - 'Host key verification failed.','Connection refused','Connection timed out'],timeout=120) - if query == 1: + ssh = pexpect.spawn(connect.format(self.username, self.host)) + query = ssh.expect(['password:', pexpect.TIMEOUT, pexpect.EOF, 'continue connecting (yes/no)?', + 'Host key verification failed.', 'Connection refused', 'Connection timed out'], timeout=120) + if query == 1: _LOGGER.error("Timeout") return elif query == 2: @@ -108,23 +108,23 @@ class ArubaDeviceScanner(object): return elif query == 3: ssh.sendline('yes') - ssh.expect ('password:') + ssh.expect('password:') elif query == 4: _LOGGER.error("Host key Changed") return elif query == 5: - #_LOGGER.error("Connection refused by server") + _LOGGER.error("Connection refused by server") return elif query == 6: - #_LOGGER.error("Connection timed out") + _LOGGER.error("Connection timed out") return - ssh.sendline (self.password ) - ssh.expect ('#') - ssh.sendline ('show clients') - ssh.expect ('#') + ssh.sendline(self.password) + ssh.expect('#') + ssh.sendline('show clients') + ssh.expect('#') devices_result = ssh.before.split(b'\r\n') - ssh.sendline ('exit') - + ssh.sendline('exit') + devices = {} for device in devices_result: match = _DEVICES_REGEX.search(device.decode('utf-8')) @@ -133,5 +133,5 @@ class ArubaDeviceScanner(object): 'ip': match.group('ip'), 'mac': match.group('mac').upper(), 'name': match.group('name') - } + } return devices From 55932b048e397a32d82ab9052a166e8070c1ec7a Mon Sep 17 00:00:00 2001 From: carlosmgr Date: Tue, 2 Feb 2016 23:54:32 +0000 Subject: [PATCH 4/5] fix pep8 --- homeassistant/components/device_tracker/aruba.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/device_tracker/aruba.py b/homeassistant/components/device_tracker/aruba.py index f901d798c26..fe8acb95ccd 100644 --- a/homeassistant/components/device_tracker/aruba.py +++ b/homeassistant/components/device_tracker/aruba.py @@ -98,8 +98,9 @@ class ArubaDeviceScanner(object): import pexpect connect = "ssh {}@{}" ssh = pexpect.spawn(connect.format(self.username, self.host)) - query = ssh.expect(['password:', pexpect.TIMEOUT, pexpect.EOF, 'continue connecting (yes/no)?', - 'Host key verification failed.', 'Connection refused', 'Connection timed out'], timeout=120) + query = ssh.expect(['password:', pexpect.TIMEOUT, pexpect.EOF, + 'continue connecting (yes/no)?', 'Host key verification failed.', + 'Connection refused', 'Connection timed out'], timeout=120) if query == 1: _LOGGER.error("Timeout") return From 3d695405b7c9043b162d8872bbb75c27f99d6083 Mon Sep 17 00:00:00 2001 From: carlosmgr Date: Wed, 3 Feb 2016 00:03:50 +0000 Subject: [PATCH 5/5] pep8 2 time --- homeassistant/components/device_tracker/aruba.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/device_tracker/aruba.py b/homeassistant/components/device_tracker/aruba.py index fe8acb95ccd..6d94ad30d04 100644 --- a/homeassistant/components/device_tracker/aruba.py +++ b/homeassistant/components/device_tracker/aruba.py @@ -99,8 +99,10 @@ class ArubaDeviceScanner(object): connect = "ssh {}@{}" ssh = pexpect.spawn(connect.format(self.username, self.host)) query = ssh.expect(['password:', pexpect.TIMEOUT, pexpect.EOF, - 'continue connecting (yes/no)?', 'Host key verification failed.', - 'Connection refused', 'Connection timed out'], timeout=120) + 'continue connecting (yes/no)?', + 'Host key verification failed.', + 'Connection refused', + 'Connection timed out'], timeout=120) if query == 1: _LOGGER.error("Timeout") return