Initial commit: LAN Checker

Network health monitoring script with MQTT reporting for Home Assistant.
- Ping, HTTP, and SNMP checkers
- MQTT Discovery for automatic entity creation
- Configurable check intervals

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-26 16:22:55 +01:00
commit 02b14979bc
11 changed files with 536 additions and 0 deletions

62
checkers/snmp.py Normal file
View File

@@ -0,0 +1,62 @@
import time
from pysnmp.hlapi import (
SnmpEngine,
CommunityData,
UdpTransportTarget,
ContextData,
ObjectType,
ObjectIdentity,
getCmd,
)
from .base import BaseChecker, CheckResult
class SnmpChecker(BaseChecker):
def check(self) -> CheckResult:
host = self.config["host"]
port = self.config.get("port", 161)
community = self.config.get("community", "public")
oid = self.config.get("oid", "1.3.6.1.2.1.1.1.0") # sysDescr
timeout_val = self.config.get("timeout", 5)
start = time.time()
try:
iterator = getCmd(
SnmpEngine(),
CommunityData(community),
UdpTransportTarget((host, port), timeout=timeout_val, retries=1),
ContextData(),
ObjectType(ObjectIdentity(oid))
)
error_indication, error_status, error_index, var_binds = next(iterator)
response_time = (time.time() - start) * 1000 # ms
if error_indication:
return CheckResult(
success=False,
message=f"SNMP error: {error_indication}",
response_time=None
)
elif error_status:
return CheckResult(
success=False,
message=f"SNMP error: {error_status.prettyPrint()}",
response_time=None
)
else:
values = {str(oid): str(val) for oid, val in var_binds}
return CheckResult(
success=True,
message="SNMP response OK",
response_time=response_time,
details=values
)
except Exception as e:
return CheckResult(
success=False,
message=f"SNMP error: {e}",
response_time=None
)