Compare commits
8 Commits
Author | SHA1 | Date | |
---|---|---|---|
6ba0a343fc | |||
f2d0d1ca94 | |||
fa0b168ad3 | |||
4bdeb56013 | |||
f557893fad | |||
5de07b85dc | |||
38d35c1e79 | |||
101072eabc |
2
LICENSE
2
LICENSE
@ -1,6 +1,6 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2019 Daniel Chote
|
||||
Copyright (c) 2025 Wolfgang Hottgenroth
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
64
README.md
64
README.md
@ -1,64 +0,0 @@
|
||||
# snmp-mqtt
|
||||
|
||||
This project is directly derived from https://github.com/dchote/snmp-mqtt
|
||||
|
||||
A simple go app that reads SNMP values and publishes it to the specified MQTT endpoint at the specified interval.
|
||||
|
||||
In constrast to the original version, all configuration must be provided via an environment variable containing
|
||||
a JSON string.
|
||||
|
||||
The MQTT configuration is part of this JSON string.
|
||||
|
||||
The topic has been moved to the MQTT configuration and there is now only one topic for all endpoints and variables.
|
||||
|
||||
The published message on MQTT looks like this:
|
||||
|
||||
```
|
||||
{"device":"172.16.3.1","label":"router","variables":{"lan-in":{"label":"lan-in","variable":".1.3.6.1.2.1.31.1.1.1.6.2","value":"979673705579"},"lan-out":{"label":"lan-out","variable":".1.3.6.1.2.1.31.1.1.1.10.2","value":"1813410276168"},"wan-in":{"label":"wan-in","variable":".1.3.6.1.2.1.31.1.1.1.6.4","value":"83591215399"},"wan-out":{"label":"wan-out","variable":".1.3.6.1.2.1.31.1.1.1.10.4","value":"83741895468"}}}
|
||||
```
|
||||
|
||||
```
|
||||
export SNMP_MQTT_CONF=$(cat config.json)
|
||||
./smq
|
||||
```
|
||||
|
||||
An example config.json file:
|
||||
```
|
||||
{
|
||||
"mqtt": {
|
||||
"broker": "mqtt://172.23.1.102:1883",
|
||||
"tlsEnable": "false",
|
||||
"topic": "snmp"
|
||||
},
|
||||
"interval": 10,
|
||||
"snmpEndpoints": [
|
||||
{
|
||||
"endpoint": "172.16.3.1",
|
||||
"label": "router",
|
||||
"community": "public",
|
||||
"oidTopics": [
|
||||
{
|
||||
"oid": ".1.3.6.1.2.1.31.1.1.1.6.4",
|
||||
"label": "wan-in",
|
||||
"diff": "true"
|
||||
},
|
||||
{
|
||||
"oid": ".1.3.6.1.2.1.31.1.1.1.10.4",
|
||||
"label": "wan-out",
|
||||
"diff": "true"
|
||||
},
|
||||
{
|
||||
"oid": ".1.3.6.1.2.1.31.1.1.1.6.2",
|
||||
"label": "lan-in",
|
||||
"diff": "true"
|
||||
},
|
||||
{
|
||||
"oid": ".1.3.6.1.2.1.31.1.1.1.10.2",
|
||||
"label": "lan-out",
|
||||
"diff": "true"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
@ -39,24 +39,31 @@ func Start() {
|
||||
Variables: make(map[string]variable_t),
|
||||
}
|
||||
|
||||
label := "rootdisp"
|
||||
status := "Ok"
|
||||
value := 0.0
|
||||
rootdisp := 0.0
|
||||
stratum := 0
|
||||
resp, err := ntp.Query(server.Name)
|
||||
if err != nil {
|
||||
status = "Error"
|
||||
} else {
|
||||
value = resp.RootDispersion.Seconds() * 1000
|
||||
rootdisp = resp.RootDispersion.Seconds() * 1000
|
||||
stratum = int(resp.Stratum)
|
||||
}
|
||||
|
||||
v := variable_t {
|
||||
Label: label,
|
||||
message.Variables["rootdisp"] = variable_t {
|
||||
Label: "rootdisp",
|
||||
Variable: "",
|
||||
Value: strconv.FormatFloat(value, 'f', 4, 64),
|
||||
Value: strconv.FormatFloat(rootdisp, 'f', 4, 64),
|
||||
Unit: "ms",
|
||||
Status: status,
|
||||
}
|
||||
message.Variables["stratum"] = variable_t {
|
||||
Label: "stratum",
|
||||
Variable: "",
|
||||
Value: strconv.Itoa(stratum),
|
||||
Unit: "ms",
|
||||
Status: status,
|
||||
}
|
||||
message.Variables[label] = v
|
||||
|
||||
|
||||
j, err := json.Marshal(message)
|
||||
|
Reference in New Issue
Block a user