1 """Support for displaying collected data over SNMP."""
3 from __future__
import annotations
7 from pysnmp.hlapi.asyncio
import (
17 from pysnmp.hlapi.asyncio.cmdgen
import lcd, vbProcessor
18 from pysnmp.smi.builder
import MibBuilder
24 DATA_SNMP_ENGINE =
"snmp_engine"
26 _LOGGER = logging.getLogger(__name__)
28 type CommandArgsType = tuple[
30 UsmUserData | CommunityData,
31 UdpTransportTarget | Udp6TransportTarget,
36 type RequestArgsType = tuple[
38 UsmUserData | CommunityData,
39 UdpTransportTarget | Udp6TransportTarget,
47 auth_data: UsmUserData | CommunityData,
48 target: UdpTransportTarget | Udp6TransportTarget,
50 """Create command arguments.
52 The ObjectType needs to be created dynamically by the caller.
55 return (engine, auth_data, target, ContextData())
60 auth_data: UsmUserData | CommunityData,
61 target: UdpTransportTarget | Udp6TransportTarget,
64 """Create request arguments.
66 The same ObjectType is used for all requests.
69 hass, auth_data, target
71 object_type = ObjectType(ObjectIdentity(object_id))
72 return (engine, auth_data, target, context_data, object_type)
75 @singleton(DATA_SNMP_ENGINE)
77 """Get the SNMP engine."""
78 engine = await hass.async_add_executor_job(_get_snmp_engine)
81 def _async_shutdown_listener(ev: Event) ->
None:
82 _LOGGER.debug(
"Unconfiguring SNMP engine")
83 lcd.unconfigure(engine,
None)
85 hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, _async_shutdown_listener)
90 """Return a cached instance of SnmpEngine."""
92 mib_controller = vbProcessor.getMibViewController(engine)
95 builder: MibBuilder = mib_controller.mibBuilder
96 if "PYSNMP-MIB" not in builder.mibSymbols:
SnmpEngine async_get_snmp_engine(HomeAssistant hass)
SnmpEngine _get_snmp_engine()
RequestArgsType async_create_request_cmd_args(HomeAssistant hass, UsmUserData|CommunityData auth_data, UdpTransportTarget|Udp6TransportTarget target, str object_id)
CommandArgsType async_create_command_cmd_args(HomeAssistant hass, UsmUserData|CommunityData auth_data, UdpTransportTarget|Udp6TransportTarget target)