3.9 KiB
3.9 KiB
WARP.md
This file provides guidance to WARP (warp.dev) when working with code in this repository.
Project Overview
snmp2mqtt is a Python script that bridges SNMP network device monitoring with MQTT messaging for Home Assistant integration. It specifically monitors a MikroTik router (Hex) and publishes network interface statistics and status information to MQTT topics for Home Assistant discovery.
Architecture
Core Components
- SNMP Client: Uses
pysnmp.hlapi.asyncio.slim
for asynchronous SNMP data retrieval from network devices - MQTT Publisher: Uses
paho.mqtt.client
to publish data to an MQTT broker - Home Assistant Integration: Generates device discovery configuration compatible with Home Assistant MQTT Discovery
- Data Processing: Converts SNMP OID values to appropriate data types (int, bool) for Home Assistant sensors
Key Functions
get_snmp(req)
: Asynchronously retrieves SNMP data from configured OIDsconnect_mqtt(mqtt_config)
: Establishes MQTT broker connectionpublish(topic, client, data, retain, qos)
: Publishes JSON data to MQTT topicsha_create_config(req)
: Generates Home Assistant device discovery configurationsend_to_mqtt()
: Main loop that continuously publishes config and state data
Configuration Structure
The script uses two main configuration dictionaries:
req
: Defines the target device, SNMP community, and monitored OIDs with Home Assistant metadatamqtt_config
: MQTT broker connection parameters
Common Development Commands
Environment Setup
# Activate virtual environment
source bin/activate
# Install dependencies (if needed)
pip install pysnmp paho-mqtt
# Check installed packages
pip list
Running the Application
# Run the main script
python snmp2mqtt.py
# Run with Python 3 explicitly
python3 snmp2mqtt.py
# Run from virtual environment
./bin/python snmp2mqtt.py
Development and Testing
# Test SNMP connectivity to device
# (Manual SNMP walk example)
snmpwalk -v2c -c public 192.168.10.2 1.3.6.1.2.1.2.2.1.10
# Monitor MQTT messages (if mosquitto-clients available)
mosquitto_sub -h 192.168.10.202 -u snmp2mqtt -P 'snmp_2_MQTT' -t 'homeassistant/device/+/config'
mosquitto_sub -h 192.168.10.202 -u snmp2mqtt -P 'snmp_2_MQTT' -t 'SNMP/+/state'
# Check network connectivity
ping 192.168.10.2
ping 192.168.10.202
Configuration Notes
Device Configuration
- Hardcoded to monitor MikroTik Hex router at IP
192.168.10.2
- SNMP community:
public
- Monitors interfaces: Starlink (index 1), LAN bridge (index 6), VPN (index 12)
MQTT Configuration
- Broker:
192.168.10.202:1883
- Credentials:
snmp2mqtt
/snmp_2_MQTT
- Config topic:
homeassistant/device/{device_id}/config
- State topic:
SNMP/{device_name}/state
Monitored Metrics
For each interface:
- Incoming bytes (
oid: .1.3.6.1.2.1.2.2.1.10.X
) - Published as data_size sensor - Outgoing bytes (
oid: .1.3.6.1.2.1.2.2.1.16.X
) - Published as data_size sensor - Interface status (
oid: .1.3.6.1.2.1.2.2.1.8.X
) - Published as connectivity binary_sensor
Customization Points
Adding New Devices
- Create new
req
configuration dictionary with device details - Update
mqtt_config
if different broker needed - Configure appropriate SNMP OIDs for the device type
Adding New OIDs
Each OID entry requires:
name
: Unique identifier for Home Assistantoid
: SNMP Object Identifiertype
: Python type conversion (int, bool)HA_platform
: Home Assistant platform (sensor, binary_sensor)HA_device_class
: Device class for proper Home Assistant categorizationHA_unit
: (optional) Unit of measurement
Home Assistant Integration
The script automatically creates Home Assistant MQTT Discovery configuration with:
- Device identification and grouping
- Sensor types and units appropriate for network monitoring
- Value templates for JSON data extraction