diff --git a/examples/simple_room_server/MyMesh.cpp b/examples/simple_room_server/MyMesh.cpp index 0527f971..ada72858 100644 --- a/examples/simple_room_server/MyMesh.cpp +++ b/examples/simple_room_server/MyMesh.cpp @@ -1164,6 +1164,10 @@ void MyMesh::formatRadioStatsReply(char *reply) { StatsFormatHelper::formatRadioStats(reply, _radio, radio_driver, getTotalAirTime(), getReceiveAirTime()); } +void MyMesh::formatRadioDiagReply(char *reply) { + StatsFormatHelper::formatRadioDiag(reply, _radio, radio_driver, *_ms, _err_flags, hasOutbound()); +} + void MyMesh::formatPacketStatsReply(char *reply) { StatsFormatHelper::formatPacketStats(reply, radio_driver, getNumSentFlood(), getNumSentDirect(), getNumRecvFlood(), getNumRecvDirect()); @@ -1474,6 +1478,25 @@ void MyMesh::loop() { } } #endif + +#ifdef WITH_SNMP + // Push radio stats to SNMP agent every 2 seconds + if (_snmp_agent.isRunning()) { + static unsigned long last_snmp_stats = 0; + if (now - last_snmp_stats >= 2000) { + last_snmp_stats = now; + _snmp_agent.updateRadioStats( + radio_driver.getPacketsRecv(), radio_driver.getPacketsSent(), + radio_driver.getPacketsRecvErrors(), + (int16_t)_radio->getNoiseFloor(), + (int16_t)radio_driver.getLastRSSI(), + (int16_t)(radio_driver.getLastSNR() * 4), + getNumSentFlood(), getNumSentDirect(), + getNumRecvFlood(), getNumRecvDirect(), + getTotalAirTime() / 1000, uptime_millis / 1000); + } + } +#endif } #if defined(WITH_MQTT_NEIGHBORS) diff --git a/examples/simple_room_server/MyMesh.h b/examples/simple_room_server/MyMesh.h index 8ec944b5..57833d8c 100644 --- a/examples/simple_room_server/MyMesh.h +++ b/examples/simple_room_server/MyMesh.h @@ -30,6 +30,10 @@ #define WITH_BRIDGE #endif +#ifdef WITH_SNMP +#include "helpers/SNMPAgent.h" +#endif + /* ------------------------------ Config -------------------------------- */ #ifndef FIRMWARE_BUILD_DATE @@ -171,6 +175,9 @@ class MyMesh : public mesh::Mesh, public CommonCLICallbacks { #ifdef WITH_MQTT_BRIDGE MQTTBridge* bridge; #endif +#ifdef WITH_SNMP + MeshSNMPAgent _snmp_agent; +#endif #ifdef WITH_MQTT_BRIDGE AlertReporter _alerter; #endif @@ -279,6 +286,7 @@ public: void removeNeighbor(const uint8_t* pubkey, int key_len) override; void formatStatsReply(char *reply) override; void formatRadioStatsReply(char *reply) override; + void formatRadioDiagReply(char *reply) override; void formatPacketStatsReply(char *reply) override; void startRegionsLoad() override; bool saveRegions() override; @@ -313,6 +321,13 @@ public: bridge->setBuildDate(getBuildDate()); #ifdef WITH_MQTT_BRIDGE bridge->setStatsSources(this, _radio, _cli.getBoard(), _ms); +#ifdef WITH_SNMP + if (_cli.getObserverPrefs()->snmp_enabled) { + _snmp_agent.setNodeName(_prefs.node_name); + _snmp_agent.setFirmwareVersion(getFirmwareVer()); + bridge->setSNMPAgent(&_snmp_agent); + } +#endif #endif bridge->begin(); #ifdef WITH_MQTT_BRIDGE diff --git a/variants/heltec_v3/platformio.ini b/variants/heltec_v3/platformio.ini index 1bb69a79..1715e361 100644 --- a/variants/heltec_v3/platformio.ini +++ b/variants/heltec_v3/platformio.ini @@ -204,11 +204,13 @@ build_flags = -D CONFIG_MBEDTLS_CERTIFICATE_BUNDLE=y -D ESP32_CPU_FREQ=160 -D MQTT_WIFI_TX_POWER=WIFI_POWER_11dBm + -D WITH_SNMP=1 build_src_filter = ${Heltec_lora32_v3.build_src_filter} + + + + + + +<../examples/simple_room_server> lib_deps = ${Heltec_lora32_v3.lib_deps} @@ -218,6 +220,7 @@ lib_deps = arduino-libraries/NTPClient JChristensen/Timezone paulstoffregen/Time@1.6.1 + 0neblock/SNMP_Agent [env:Heltec_v3_terminal_chat] extends = Heltec_lora32_v3 @@ -545,10 +548,12 @@ build_flags = -D CONFIG_MBEDTLS_CERTIFICATE_BUNDLE=y -D ESP32_CPU_FREQ=160 -D MQTT_WIFI_TX_POWER=WIFI_POWER_11dBm + -D WITH_SNMP=1 build_src_filter = ${Heltec_lora32_v3.build_src_filter} + + + + + +<../examples/simple_room_server> lib_deps = ${Heltec_lora32_v3.lib_deps} @@ -558,6 +563,7 @@ lib_deps = arduino-libraries/NTPClient JChristensen/Timezone paulstoffregen/Time@1.6.1 + 0neblock/SNMP_Agent [env:Heltec_v3_kiss_modem] extends = Heltec_lora32_v3 diff --git a/variants/heltec_v4/platformio.ini b/variants/heltec_v4/platformio.ini index e066c2b6..de5dc2e0 100644 --- a/variants/heltec_v4/platformio.ini +++ b/variants/heltec_v4/platformio.ini @@ -327,11 +327,13 @@ build_flags = -D CONFIG_MBEDTLS_CERTIFICATE_BUNDLE=y -D ESP32_CPU_FREQ=160 -D MQTT_WIFI_TX_POWER=WIFI_POWER_11dBm + -D WITH_SNMP=1 build_src_filter = ${heltec_v4_oled.build_src_filter} + + + + + + +<../examples/simple_room_server> lib_deps = ${heltec_v4_oled.lib_deps} @@ -341,6 +343,7 @@ lib_deps = arduino-libraries/NTPClient JChristensen/Timezone paulstoffregen/Time@1.6.1 + 0neblock/SNMP_Agent [env:heltec_v4_expansionkit_room_server_observer_mqtt] extends = heltec_v4_oled @@ -370,11 +373,13 @@ build_flags = -D MQTT_WIFI_TX_POWER=WIFI_POWER_11dBm -D ENV_PIN_SDA=4 -D ENV_PIN_SCL=3 + -D WITH_SNMP=1 build_src_filter = ${heltec_v4_oled.build_src_filter} + + + + + + +<../examples/simple_room_server> lib_deps = ${heltec_v4_oled.lib_deps} @@ -384,6 +389,7 @@ lib_deps = arduino-libraries/NTPClient JChristensen/Timezone paulstoffregen/Time@1.6.1 + 0neblock/SNMP_Agent [env:heltec_v4_room_server] extends = heltec_v4_oled diff --git a/variants/rak3112/platformio.ini b/variants/rak3112/platformio.ini index 775c50b5..e7222a22 100644 --- a/variants/rak3112/platformio.ini +++ b/variants/rak3112/platformio.ini @@ -187,10 +187,12 @@ build_flags = -D CONFIG_MBEDTLS_CERTIFICATE_BUNDLE=y -D ESP32_CPU_FREQ=160 -D MQTT_WIFI_TX_POWER=WIFI_POWER_11dBm + -D WITH_SNMP=1 build_src_filter = ${rak3112.build_src_filter} + + + + + +<../examples/simple_room_server> lib_deps = ${rak3112.lib_deps} @@ -200,6 +202,7 @@ lib_deps = arduino-libraries/NTPClient JChristensen/Timezone paulstoffregen/Time@1.6.1 + 0neblock/SNMP_Agent [env:RAK_3112_terminal_chat] extends = rak3112 diff --git a/variants/station_g2/platformio.ini b/variants/station_g2/platformio.ini index d41c062f..89219748 100644 --- a/variants/station_g2/platformio.ini +++ b/variants/station_g2/platformio.ini @@ -196,11 +196,13 @@ build_flags = ; -D MESH_DEBUG=1 -D CONFIG_MBEDTLS_CERTIFICATE_BUNDLE=y -D ESP32_CPU_FREQ=160 + -D WITH_SNMP=1 build_src_filter = ${Station_G2.build_src_filter} + + + + + + +<../examples/simple_room_server> lib_deps = ${Station_G2.lib_deps} @@ -210,6 +212,7 @@ lib_deps = arduino-libraries/NTPClient JChristensen/Timezone paulstoffregen/Time@1.6.1 + 0neblock/SNMP_Agent [env:Station_G2_room_server] extends = Station_G2