Share snmp constants across all platforms (#23678)
* Share constants across all platforms * Update .coveragerc
This commit is contained in:
parent
074142400a
commit
b60c815cde
5 changed files with 83 additions and 113 deletions
|
@ -539,9 +539,7 @@ omit =
|
||||||
homeassistant/components/smappee/*
|
homeassistant/components/smappee/*
|
||||||
homeassistant/components/smtp/notify.py
|
homeassistant/components/smtp/notify.py
|
||||||
homeassistant/components/snapcast/media_player.py
|
homeassistant/components/snapcast/media_player.py
|
||||||
homeassistant/components/snmp/device_tracker.py
|
homeassistant/components/snmp/*
|
||||||
homeassistant/components/snmp/sensor.py
|
|
||||||
homeassistant/components/snmp/switch.py
|
|
||||||
homeassistant/components/sochain/sensor.py
|
homeassistant/components/sochain/sensor.py
|
||||||
homeassistant/components/socialblade/sensor.py
|
homeassistant/components/socialblade/sensor.py
|
||||||
homeassistant/components/solaredge/sensor.py
|
homeassistant/components/solaredge/sensor.py
|
||||||
|
|
43
homeassistant/components/snmp/const.py
Normal file
43
homeassistant/components/snmp/const.py
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
"""SNMP constants."""
|
||||||
|
CONF_ACCEPT_ERRORS = 'accept_errors'
|
||||||
|
CONF_AUTH_KEY = 'auth_key'
|
||||||
|
CONF_AUTH_PROTOCOL = 'auth_protocol'
|
||||||
|
CONF_BASEOID = 'baseoid'
|
||||||
|
CONF_COMMUNITY = 'community'
|
||||||
|
CONF_DEFAULT_VALUE = 'default_value'
|
||||||
|
CONF_PRIV_KEY = 'priv_key'
|
||||||
|
CONF_PRIV_PROTOCOL = 'priv_protocol'
|
||||||
|
CONF_VERSION = 'version'
|
||||||
|
|
||||||
|
DEFAULT_AUTH_PROTOCOL = 'none'
|
||||||
|
DEFAULT_COMMUNITY = 'public'
|
||||||
|
DEFAULT_HOST = 'localhost'
|
||||||
|
DEFAULT_NAME = 'SNMP'
|
||||||
|
DEFAULT_PORT = '161'
|
||||||
|
DEFAULT_PRIV_PROTOCOL = 'none'
|
||||||
|
DEFAULT_VERSION = '1'
|
||||||
|
|
||||||
|
SNMP_VERSIONS = {
|
||||||
|
'1': 0,
|
||||||
|
'2c': 1,
|
||||||
|
'3': None
|
||||||
|
}
|
||||||
|
|
||||||
|
MAP_AUTH_PROTOCOLS = {
|
||||||
|
'none': 'usmNoAuthProtocol',
|
||||||
|
'hmac-md5': 'usmHMACMD5AuthProtocol',
|
||||||
|
'hmac-sha': 'usmHMACSHAAuthProtocol',
|
||||||
|
'hmac128-sha224': 'usmHMAC128SHA224AuthProtocol',
|
||||||
|
'hmac192-sha256': 'usmHMAC192SHA256AuthProtocol',
|
||||||
|
'hmac256-sha384': 'usmHMAC256SHA384AuthProtocol',
|
||||||
|
'hmac384-sha512': 'usmHMAC384SHA512AuthProtocol',
|
||||||
|
}
|
||||||
|
|
||||||
|
MAP_PRIV_PROTOCOLS = {
|
||||||
|
'none': 'usmNoPrivProtocol',
|
||||||
|
'des': 'usmDESPrivProtocol',
|
||||||
|
'3des-ede': 'usm3DESEDEPrivProtocol',
|
||||||
|
'aes-cfb-128': 'usmAesCfb128Protocol',
|
||||||
|
'aes-cfb-192': 'usmAesCfb192Protocol',
|
||||||
|
'aes-cfb-256': 'usmAesCfb256Protocol',
|
||||||
|
}
|
|
@ -4,26 +4,23 @@ import logging
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
import homeassistant.helpers.config_validation as cv
|
|
||||||
from homeassistant.components.device_tracker import (
|
from homeassistant.components.device_tracker import (
|
||||||
DOMAIN, PLATFORM_SCHEMA, DeviceScanner)
|
DOMAIN, PLATFORM_SCHEMA, DeviceScanner)
|
||||||
from homeassistant.const import CONF_HOST
|
from homeassistant.const import CONF_HOST
|
||||||
|
import homeassistant.helpers.config_validation as cv
|
||||||
|
|
||||||
|
from .const import (
|
||||||
|
CONF_AUTH_KEY, CONF_BASEOID, CONF_COMMUNITY, CONF_PRIV_KEY,
|
||||||
|
DEFAULT_COMMUNITY)
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
CONF_AUTHKEY = 'authkey'
|
|
||||||
CONF_BASEOID = 'baseoid'
|
|
||||||
CONF_COMMUNITY = 'community'
|
|
||||||
CONF_PRIVKEY = 'privkey'
|
|
||||||
|
|
||||||
DEFAULT_COMMUNITY = 'public'
|
|
||||||
|
|
||||||
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
|
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
|
||||||
vol.Required(CONF_BASEOID): cv.string,
|
vol.Required(CONF_BASEOID): cv.string,
|
||||||
vol.Required(CONF_HOST): cv.string,
|
vol.Required(CONF_HOST): cv.string,
|
||||||
vol.Optional(CONF_COMMUNITY, default=DEFAULT_COMMUNITY): cv.string,
|
vol.Optional(CONF_COMMUNITY, default=DEFAULT_COMMUNITY): cv.string,
|
||||||
vol.Inclusive(CONF_AUTHKEY, 'keys'): cv.string,
|
vol.Inclusive(CONF_AUTH_KEY, 'keys'): cv.string,
|
||||||
vol.Inclusive(CONF_PRIVKEY, 'keys'): cv.string,
|
vol.Inclusive(CONF_PRIV_KEY, 'keys'): cv.string,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
@ -44,13 +41,13 @@ class SnmpScanner(DeviceScanner):
|
||||||
self.snmp = cmdgen.CommandGenerator()
|
self.snmp = cmdgen.CommandGenerator()
|
||||||
|
|
||||||
self.host = cmdgen.UdpTransportTarget((config[CONF_HOST], 161))
|
self.host = cmdgen.UdpTransportTarget((config[CONF_HOST], 161))
|
||||||
if CONF_AUTHKEY not in config or CONF_PRIVKEY not in config:
|
if CONF_AUTH_KEY not in config or CONF_PRIV_KEY not in config:
|
||||||
self.auth = cmdgen.CommunityData(config[CONF_COMMUNITY])
|
self.auth = cmdgen.CommunityData(config[CONF_COMMUNITY])
|
||||||
else:
|
else:
|
||||||
self.auth = cmdgen.UsmUserData(
|
self.auth = cmdgen.UsmUserData(
|
||||||
config[CONF_COMMUNITY],
|
config[CONF_COMMUNITY],
|
||||||
config[CONF_AUTHKEY],
|
config[CONF_AUTH_KEY],
|
||||||
config[CONF_PRIVKEY],
|
config[CONF_PRIV_KEY],
|
||||||
authProtocol=cfg.usmHMACSHAAuthProtocol,
|
authProtocol=cfg.usmHMACSHAAuthProtocol,
|
||||||
privProtocol=cfg.usmAesCfb128Protocol
|
privProtocol=cfg.usmAesCfb128Protocol
|
||||||
)
|
)
|
||||||
|
@ -108,7 +105,7 @@ class SnmpScanner(DeviceScanner):
|
||||||
mac = binascii.hexlify(val.asOctets()).decode('utf-8')
|
mac = binascii.hexlify(val.asOctets()).decode('utf-8')
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
continue
|
continue
|
||||||
_LOGGER.debug("Found MAC %s", mac)
|
_LOGGER.debug("Found MAC address: %s", mac)
|
||||||
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.append({'mac': mac})
|
devices.append({'mac': mac})
|
||||||
return devices
|
return devices
|
||||||
|
|
|
@ -1,61 +1,25 @@
|
||||||
"""Support for displaying collected data over SNMP."""
|
"""Support for displaying collected data over SNMP."""
|
||||||
import logging
|
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
|
import logging
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
import homeassistant.helpers.config_validation as cv
|
|
||||||
from homeassistant.components.sensor import PLATFORM_SCHEMA
|
from homeassistant.components.sensor import PLATFORM_SCHEMA
|
||||||
from homeassistant.helpers.entity import Entity
|
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
CONF_HOST, CONF_NAME, CONF_PORT, CONF_UNIT_OF_MEASUREMENT, STATE_UNKNOWN,
|
CONF_HOST, CONF_NAME, CONF_PORT, CONF_UNIT_OF_MEASUREMENT, CONF_USERNAME,
|
||||||
CONF_USERNAME, CONF_VALUE_TEMPLATE)
|
CONF_VALUE_TEMPLATE, STATE_UNKNOWN)
|
||||||
|
import homeassistant.helpers.config_validation as cv
|
||||||
|
from homeassistant.helpers.entity import Entity
|
||||||
|
|
||||||
|
from .const import (
|
||||||
|
CONF_ACCEPT_ERRORS, CONF_AUTH_KEY, CONF_AUTH_PROTOCOL, CONF_BASEOID,
|
||||||
|
CONF_COMMUNITY, CONF_DEFAULT_VALUE, CONF_PRIV_KEY, CONF_PRIV_PROTOCOL,
|
||||||
|
CONF_VERSION, DEFAULT_AUTH_PROTOCOL, DEFAULT_COMMUNITY, DEFAULT_HOST,
|
||||||
|
DEFAULT_NAME, DEFAULT_PORT, DEFAULT_PRIV_PROTOCOL, DEFAULT_VERSION,
|
||||||
|
MAP_AUTH_PROTOCOLS, MAP_PRIV_PROTOCOLS, SNMP_VERSIONS)
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
CONF_BASEOID = 'baseoid'
|
|
||||||
CONF_COMMUNITY = 'community'
|
|
||||||
CONF_VERSION = 'version'
|
|
||||||
CONF_AUTH_KEY = 'auth_key'
|
|
||||||
CONF_AUTH_PROTOCOL = 'auth_protocol'
|
|
||||||
CONF_PRIV_KEY = 'priv_key'
|
|
||||||
CONF_PRIV_PROTOCOL = 'priv_protocol'
|
|
||||||
CONF_ACCEPT_ERRORS = 'accept_errors'
|
|
||||||
CONF_DEFAULT_VALUE = 'default_value'
|
|
||||||
|
|
||||||
DEFAULT_COMMUNITY = 'public'
|
|
||||||
DEFAULT_HOST = 'localhost'
|
|
||||||
DEFAULT_NAME = 'SNMP'
|
|
||||||
DEFAULT_PORT = '161'
|
|
||||||
DEFAULT_VERSION = '1'
|
|
||||||
DEFAULT_AUTH_PROTOCOL = 'none'
|
|
||||||
DEFAULT_PRIV_PROTOCOL = 'none'
|
|
||||||
|
|
||||||
SNMP_VERSIONS = {
|
|
||||||
'1': 0,
|
|
||||||
'2c': 1,
|
|
||||||
'3': None
|
|
||||||
}
|
|
||||||
|
|
||||||
MAP_AUTH_PROTOCOLS = {
|
|
||||||
'none': 'usmNoAuthProtocol',
|
|
||||||
'hmac-md5': 'usmHMACMD5AuthProtocol',
|
|
||||||
'hmac-sha': 'usmHMACSHAAuthProtocol',
|
|
||||||
'hmac128-sha224': 'usmHMAC128SHA224AuthProtocol',
|
|
||||||
'hmac192-sha256': 'usmHMAC192SHA256AuthProtocol',
|
|
||||||
'hmac256-sha384': 'usmHMAC256SHA384AuthProtocol',
|
|
||||||
'hmac384-sha512': 'usmHMAC384SHA512AuthProtocol',
|
|
||||||
}
|
|
||||||
|
|
||||||
MAP_PRIV_PROTOCOLS = {
|
|
||||||
'none': 'usmNoPrivProtocol',
|
|
||||||
'des': 'usmDESPrivProtocol',
|
|
||||||
'3des-ede': 'usm3DESEDEPrivProtocol',
|
|
||||||
'aes-cfb-128': 'usmAesCfb128Protocol',
|
|
||||||
'aes-cfb-192': 'usmAesCfb192Protocol',
|
|
||||||
'aes-cfb-256': 'usmAesCfb256Protocol',
|
|
||||||
}
|
|
||||||
|
|
||||||
SCAN_INTERVAL = timedelta(seconds=10)
|
SCAN_INTERVAL = timedelta(seconds=10)
|
||||||
|
|
||||||
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
|
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
|
||||||
|
@ -194,7 +158,7 @@ class SnmpData:
|
||||||
|
|
||||||
async def async_update(self):
|
async def async_update(self):
|
||||||
"""Get the latest data from the remote SNMP capable host."""
|
"""Get the latest data from the remote SNMP capable host."""
|
||||||
from pysnmp.hlapi.asyncio import (getCmd, ObjectType, ObjectIdentity)
|
from pysnmp.hlapi.asyncio import getCmd, ObjectType, ObjectIdentity
|
||||||
|
|
||||||
errindication, errstatus, errindex, restable = await getCmd(
|
errindication, errstatus, errindex, restable = await getCmd(
|
||||||
*self._request_args, ObjectType(ObjectIdentity(self._baseoid)))
|
*self._request_args, ObjectType(ObjectIdentity(self._baseoid)))
|
||||||
|
|
|
@ -3,59 +3,27 @@ import logging
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.switch import (SwitchDevice, PLATFORM_SCHEMA)
|
from homeassistant.components.switch import PLATFORM_SCHEMA, SwitchDevice
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
CONF_HOST, CONF_NAME, CONF_PORT, CONF_PAYLOAD_ON, CONF_PAYLOAD_OFF,
|
CONF_HOST, CONF_NAME, CONF_PAYLOAD_OFF, CONF_PAYLOAD_ON, CONF_PORT,
|
||||||
CONF_USERNAME)
|
CONF_USERNAME)
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
|
|
||||||
|
from .const import (
|
||||||
|
CONF_AUTH_KEY, CONF_AUTH_PROTOCOL, CONF_BASEOID, CONF_COMMUNITY,
|
||||||
|
CONF_PRIV_KEY, CONF_PRIV_PROTOCOL, CONF_VERSION, DEFAULT_AUTH_PROTOCOL,
|
||||||
|
DEFAULT_HOST, DEFAULT_NAME, DEFAULT_PORT, DEFAULT_PRIV_PROTOCOL,
|
||||||
|
DEFAULT_VERSION, MAP_AUTH_PROTOCOLS, MAP_PRIV_PROTOCOLS, SNMP_VERSIONS)
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
CONF_BASEOID = 'baseoid'
|
|
||||||
CONF_COMMAND_OID = 'command_oid'
|
CONF_COMMAND_OID = 'command_oid'
|
||||||
CONF_COMMAND_PAYLOAD_ON = 'command_payload_on'
|
|
||||||
CONF_COMMAND_PAYLOAD_OFF = 'command_payload_off'
|
CONF_COMMAND_PAYLOAD_OFF = 'command_payload_off'
|
||||||
CONF_COMMUNITY = 'community'
|
CONF_COMMAND_PAYLOAD_ON = 'command_payload_on'
|
||||||
CONF_VERSION = 'version'
|
|
||||||
CONF_AUTH_KEY = 'auth_key'
|
|
||||||
CONF_AUTH_PROTOCOL = 'auth_protocol'
|
|
||||||
CONF_PRIV_KEY = 'priv_key'
|
|
||||||
CONF_PRIV_PROTOCOL = 'priv_protocol'
|
|
||||||
|
|
||||||
DEFAULT_NAME = 'SNMP Switch'
|
|
||||||
DEFAULT_HOST = 'localhost'
|
|
||||||
DEFAULT_PORT = '161'
|
|
||||||
DEFAULT_COMMUNITY = 'private'
|
DEFAULT_COMMUNITY = 'private'
|
||||||
DEFAULT_VERSION = '1'
|
|
||||||
DEFAULT_AUTH_PROTOCOL = 'none'
|
|
||||||
DEFAULT_PRIV_PROTOCOL = 'none'
|
|
||||||
DEFAULT_PAYLOAD_ON = 1
|
|
||||||
DEFAULT_PAYLOAD_OFF = 0
|
DEFAULT_PAYLOAD_OFF = 0
|
||||||
|
DEFAULT_PAYLOAD_ON = 1
|
||||||
SNMP_VERSIONS = {
|
|
||||||
'1': 0,
|
|
||||||
'2c': 1,
|
|
||||||
'3': None
|
|
||||||
}
|
|
||||||
|
|
||||||
MAP_AUTH_PROTOCOLS = {
|
|
||||||
'none': 'usmNoAuthProtocol',
|
|
||||||
'hmac-md5': 'usmHMACMD5AuthProtocol',
|
|
||||||
'hmac-sha': 'usmHMACSHAAuthProtocol',
|
|
||||||
'hmac128-sha224': 'usmHMAC128SHA224AuthProtocol',
|
|
||||||
'hmac192-sha256': 'usmHMAC192SHA256AuthProtocol',
|
|
||||||
'hmac256-sha384': 'usmHMAC256SHA384AuthProtocol',
|
|
||||||
'hmac384-sha512': 'usmHMAC384SHA512AuthProtocol',
|
|
||||||
}
|
|
||||||
|
|
||||||
MAP_PRIV_PROTOCOLS = {
|
|
||||||
'none': 'usmNoPrivProtocol',
|
|
||||||
'des': 'usmDESPrivProtocol',
|
|
||||||
'3des-ede': 'usm3DESEDEPrivProtocol',
|
|
||||||
'aes-cfb-128': 'usmAesCfb128Protocol',
|
|
||||||
'aes-cfb-192': 'usmAesCfb192Protocol',
|
|
||||||
'aes-cfb-256': 'usmAesCfb256Protocol',
|
|
||||||
}
|
|
||||||
|
|
||||||
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
|
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
|
||||||
vol.Required(CONF_BASEOID): cv.string,
|
vol.Required(CONF_BASEOID): cv.string,
|
||||||
|
@ -115,8 +83,8 @@ class SnmpSwitch(SwitchDevice):
|
||||||
command_payload_off):
|
command_payload_off):
|
||||||
"""Initialize the switch."""
|
"""Initialize the switch."""
|
||||||
from pysnmp.hlapi.asyncio import (
|
from pysnmp.hlapi.asyncio import (
|
||||||
CommunityData, ContextData, SnmpEngine,
|
CommunityData, ContextData, SnmpEngine, UdpTransportTarget,
|
||||||
UdpTransportTarget, UsmUserData)
|
UsmUserData)
|
||||||
|
|
||||||
self._name = name
|
self._name = name
|
||||||
self._baseoid = baseoid
|
self._baseoid = baseoid
|
||||||
|
@ -172,8 +140,8 @@ class SnmpSwitch(SwitchDevice):
|
||||||
|
|
||||||
async def async_update(self):
|
async def async_update(self):
|
||||||
"""Update the state."""
|
"""Update the state."""
|
||||||
from pysnmp.hlapi.asyncio import (getCmd, ObjectType, ObjectIdentity)
|
from pysnmp.hlapi.asyncio import getCmd, ObjectType, ObjectIdentity
|
||||||
from pyasn1.type.univ import (Integer)
|
from pyasn1.type.univ import Integer
|
||||||
|
|
||||||
errindication, errstatus, errindex, restable = await getCmd(
|
errindication, errstatus, errindex, restable = await getCmd(
|
||||||
*self._request_args, ObjectType(ObjectIdentity(self._baseoid)))
|
*self._request_args, ObjectType(ObjectIdentity(self._baseoid)))
|
||||||
|
@ -203,7 +171,7 @@ class SnmpSwitch(SwitchDevice):
|
||||||
return self._state
|
return self._state
|
||||||
|
|
||||||
async def _set(self, value):
|
async def _set(self, value):
|
||||||
from pysnmp.hlapi.asyncio import (setCmd, ObjectType, ObjectIdentity)
|
from pysnmp.hlapi.asyncio import setCmd, ObjectType, ObjectIdentity
|
||||||
|
|
||||||
await setCmd(
|
await setCmd(
|
||||||
*self._request_args,
|
*self._request_args,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue