various fixes, initial working version
This commit is contained in:
parent
a58382e763
commit
469f35d25f
1 changed files with 31 additions and 13 deletions
|
@ -1,8 +1,12 @@
|
||||||
"""
|
"""
|
||||||
homeassistant.components.device_tracker.demo
|
homeassistant.components.device_tracker.snmp
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
Device tracker platform that supports fetching WiFi assiciations
|
||||||
|
through SNMP
|
||||||
|
|
||||||
Fetch wifi associations through snmp
|
This device tracker needs SNMP to be enabled on the WRT or WAP
|
||||||
|
|
||||||
|
Configuration:
|
||||||
|
|
||||||
device_tracker:
|
device_tracker:
|
||||||
platform: snmp
|
platform: snmp
|
||||||
|
@ -10,10 +14,22 @@ device_tracker:
|
||||||
community: SNMP_COMMUNITY
|
community: SNMP_COMMUNITY
|
||||||
baseoid: BASE_OID
|
baseoid: BASE_OID
|
||||||
|
|
||||||
|
Variables:
|
||||||
|
Host
|
||||||
|
*required
|
||||||
|
The IP address of the router, e.g. 192.168.1.1
|
||||||
|
|
||||||
Little help with base oids:
|
community
|
||||||
Microtik: 1.3.6.1.4.1.14988.1.1.1.2.1.1 (confirmed)
|
*Required
|
||||||
Aruba: 1.3.6.1.4.1.14823.2.3.3.1.2.4.1.2 (untested)
|
The SNMP community. Read-only is fine
|
||||||
|
|
||||||
|
baseoid
|
||||||
|
*Required
|
||||||
|
The OID at which WiFi associations can be found
|
||||||
|
|
||||||
|
Little help with base oids:
|
||||||
|
Microtik: 1.3.6.1.4.1.14988.1.1.1.2.1.1 (confirmed)
|
||||||
|
Aruba: 1.3.6.1.4.1.14823.2.3.3.1.2.4.1.2 (untested)
|
||||||
|
|
||||||
"""
|
"""
|
||||||
import logging
|
import logging
|
||||||
|
@ -26,18 +42,19 @@ from homeassistant.helpers import validate_config
|
||||||
from homeassistant.util import Throttle
|
from homeassistant.util import Throttle
|
||||||
from homeassistant.components.device_tracker import DOMAIN
|
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)
|
MIN_TIME_BETWEEN_SCANS = timedelta(seconds=10)
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
REQUIREMENTS = ['pysnmp']
|
REQUIREMENTS = ['pysnmp']
|
||||||
|
|
||||||
def setup_scanner(hass, config, see):
|
# pylint: disable=unused-argument
|
||||||
""" Setup snmp scanning """
|
def get_scanner(hass, config):
|
||||||
#if not validate_config(config, {DOMAIN: [CONF_HOST, CONF_COMMUNITY, CONF_BASEOID]}, _LOGGER):
|
""" Validates config and returns an snmp scanner """
|
||||||
# return None
|
if not validate_config(config, {DOMAIN: [CONF_HOST, CONF_COMMUNITY, CONF_BASEOID]}, _LOGGER):
|
||||||
|
return None
|
||||||
|
|
||||||
#scanner = SnmpScanner(config[DOMAIN])
|
scanner = SnmpScanner(config[DOMAIN])
|
||||||
scanner = SnmpScanner(config)
|
|
||||||
|
|
||||||
return scanner if scanner.success_init else None
|
return scanner if scanner.success_init else None
|
||||||
|
|
||||||
|
@ -63,6 +80,7 @@ class SnmpScanner(object):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
self._update_info()
|
self._update_info()
|
||||||
|
_LOGGER.error( self.last_results )
|
||||||
return [client['mac'] for client in self.last_results]
|
return [client['mac'] for client in self.last_results]
|
||||||
|
|
||||||
def get_device_name(self, device):
|
def get_device_name(self, device):
|
||||||
|
@ -90,7 +108,7 @@ class SnmpScanner(object):
|
||||||
""" Fetch mac addresses from WAP via SNMP. """
|
""" Fetch mac addresses from WAP via SNMP. """
|
||||||
from pysnmp.entity.rfc3413.oneliner import cmdgen
|
from pysnmp.entity.rfc3413.oneliner import cmdgen
|
||||||
|
|
||||||
devices = {}
|
devices = []
|
||||||
|
|
||||||
cmdGen = cmdgen.CommandGenerator()
|
cmdGen = cmdgen.CommandGenerator()
|
||||||
errorIndication, errorStatus, errorIndex, varBindTable = cmdGen.nextCmd(
|
errorIndication, errorStatus, errorIndex, varBindTable = cmdGen.nextCmd(
|
||||||
|
@ -108,6 +126,6 @@ class SnmpScanner(object):
|
||||||
for key,val in varBindTableRow:
|
for key,val in varBindTableRow:
|
||||||
mac = binascii.hexlify( val.asOctets() ).decode('utf-8')
|
mac = binascii.hexlify( val.asOctets() ).decode('utf-8')
|
||||||
mac = ':'.join( [ mac[i:i+2] for i in range( 0, len(mac), 2 ) ] )
|
mac = ':'.join( [ mac[i:i+2] for i in range( 0, len(mac), 2 ) ] )
|
||||||
devices[mac] = { 'mac' : mac }
|
devices.append( { 'mac' : mac } )
|
||||||
return devices
|
return devices
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue