1
0
mirror of https://github.com/Tafkas/fritzbox-munin.git synced 2023-10-10 11:36:55 +00:00

23 Commits

Author SHA1 Message Date
Christian Stade-Schuldt
213a64abe7 update changelog 2017-09-06 22:51:46 +02:00
Christian Stade-Schuldt
78a5a202cf move power consumption to system group 2017-09-06 22:41:27 +02:00
Christian Stade-Schuldt
9fe16979b7 formatting 2017-09-06 22:41:09 +02:00
Christian Stade-Schuldt
4e5ede6d12 Merge pull request #16 from bobvandevijver/separate-hosts
Fixes #15. Add support for separate hosts
2017-09-06 22:34:31 +02:00
Bob van de Vijver
ca82415b78 Fixes #15. Add support for separate hosts 2017-09-06 22:33:15 +02:00
Christian Stade-Schuldt
209eed91ae Merge pull request #18 from bobvandevijver/remove-traffic-max
Fixes #13. Configurable traffic maximum
2017-09-06 22:28:41 +02:00
Christian Stade-Schuldt
523b83ce17 Merge pull request #19 from bobvandevijver/localization-support
Fixes #14. Added localization for english
2017-09-06 22:27:38 +02:00
Bob van de Vijver
27ea9ea8eb Fixes #14. Added localization for english 2017-09-06 22:21:50 +02:00
Bob van de Vijver
c1b1d4bffa Fixes #13. Configurable traffic maximum 2017-09-06 21:35:23 +02:00
Christian Stade-Schuldt
7291edc724 Merge pull request #17 from bobvandevijver/fix-doc
Fixed doc style + removed os note on 5490
2017-09-06 21:29:51 +02:00
Bob van de Vijver
4e7a583b7a Fixed doc style + removed os note on 5490 2017-09-06 21:19:12 +02:00
Christian Stade-Schuldt
2c05d20602 Merge pull request #12 from bobvandevijver/patch-1
Added 5490 & note about language
2017-09-04 17:45:22 +02:00
Christian Stade-Schuldt
7a051bc5b8 Update README.md 2017-09-04 17:44:57 +02:00
Bob van de Vijver
d8d37e9d91 Added 5490 & note about language 2017-09-03 22:16:52 +02:00
Christian Stade-Schuldt
b8a8e2c343 update README 2017-06-11 22:49:27 +02:00
Christian Stade-Schuldt
859fd461e4 update readme 2017-06-11 22:23:29 +02:00
Christian Stade-Schuldt
bcfed06c5e Merge branch 'master' into fritzos6.5 2017-06-11 22:19:26 +02:00
Christian Stade-Schuldt
2a1185612e fix import 2016-05-17 01:38:54 +02:00
Christian Stade-Schuldt
a421008e51 fix import 2016-05-17 01:38:24 +02:00
Christian Stade-Schuldt
60fc6e7db1 use custom ip address 2016-05-17 01:30:57 +02:00
Christian Stade-Schuldt
d162f8bf83 use custom ip address 2016-05-17 01:30:28 +02:00
Christian Stade-Schuldt
59fba1f701 fix one day uptime bug 2016-04-17 11:36:32 +02:00
Christian Stade-Schuldt
c776ef25a9 update scripts for FRITZ!OS:131.06.36-32026 BETA 2015-12-19 11:34:21 +01:00
11 changed files with 206 additions and 45 deletions

61
.gitignore vendored Normal file
View File

@@ -0,0 +1,61 @@
# Created by .ignore support plugin (hsz.mobi)
### Python template
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
env/
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
*.egg-info/
.installed.cfg
*.egg
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*,cover
# Translations
*.mo
*.pot
# Django stuff:
*.log
# Sphinx documentation
docs/_build/
# PyBuilder
target/

View File

@@ -1,6 +1,18 @@
# Changelog
## 6.83.2
*2017-09-05*
- Support for German and English user interface (by: [@bobvandevijver](https://github.com/bobvandevijver))
- Support for running Fritzbox as separate host (by: [@bobvandevijver](https://github.com/bobvandevijver))
- Make maximum download and upload optional by config (by: [@bobvandevijver](https://github.com/bobvandevijver))
## 6.83.1
*2017-06-11*
- Support for FRITZ!OS 6.83. This version is not compatible with the old FRITZ!OS 6.30.
## 6.30.1
*2017-06-11*
- Initial version supporting FRITZ!OS 6.30
- Initial version supporting FRITZ!OS 6.30

View File

@@ -1,6 +1,23 @@
# fritzbox-munin
A collection of munin plugins to monitor your AVM FRITZ!Box router. The scripts have been developed using a [FRITZ!Box 7362 SL](http://geni.us/fTyoY)(Amazon link) running FRITZ!OS 06.30.
A collection of munin plugins to monitor your AVM FRITZ!Box router. The scripts have been developed using a [FRITZ!Box 7362 SL](http://geni.us/fTyoY)(Amazon link) running FRITZ!OS 06.83.
If you are using the scripts on a different Fritz!Box model please let me know by
- opening an issue
- submitting a pull request
So far the following models (running FRITZ!OS 06.83) have been confirmed working:
- [FRITZ!Box 5490](http://geni.us/ACtUyFt)
- [FRITZ!Box 7362 SL](http://geni.us/fTyoY)
- [FRITZ!Box 7390](http://geni.us/BlAP)
- [FRITZ!Box 7430](http://geni.us/BlAP)
- [FRITZ!Box 7490](http://geni.us/fTyoY)
- [FRITZ!Box 7580](http://geni.us/yUYyQTE)
If you are still running Fritz!OS 6.30 check out the [releases section](https://github.com/Tafkas/fritzbox-munin/releases/tag/6.30.1).
## Introduction
These python scripts are [Munin](http://munin-monitoring.org) plugins for monitoring the [Fritz!Box](http://avm.de/produkte/fritzbox/) router by AVM.
@@ -9,6 +26,10 @@ A collection of munin plugins to monitor your AVM FRITZ!Box router. The scripts
fritzbox\_traffic shows you the traffic of the WAN interface (requires fritzconnection)
![http://i.imgur.com/8BwNMOL.png](http://i.imgur.com/8BwNMOL.png)
If you do not want to show the interface maximum values, add the following to your plugin-configuration:
env.traffic_remove_max true
## fritzbox\_connection\_uptime
@@ -37,12 +58,12 @@ A collection of munin plugins to monitor your AVM FRITZ!Box router. The scripts
## fritzbox\_uptime
fritzbox\_uptime shows you the uptime in days (requires password)
fritzbox\_uptime shows you the uptime in days (requires password) (language dependant, see below).
![http://i.imgur.com/Jr8OibH.png](http://i.imgur.com/Jr8OibH.png)
## fritzbox\_wifi\_devices
fritzbox\_wifi\_devices shows you the number of connected wifi clients (requires password)
fritzbox\_wifi\_devices shows you the number of connected wifi clients (requires password) (language dependant, see below).
![http://i.imgur.com/lqvK1b2.png](http://i.imgur.com/lqvK1b2.png)
@@ -52,20 +73,52 @@ A collection of munin plugins to monitor your AVM FRITZ!Box router. The scripts
pip install fritzconnection
1. Copy all the scripts to =/usr/share/munin/plugins
1. Copy all the scripts to `/usr/share/munin/plugins`
2. Create entry in /etc/munin/plugin-conf.d/munin-node:
2. Create entry in `/etc/munin/plugin-conf.d/munin-node`:
[fritzbox_*]
env.fritzbox_ip <ip_address_to_your_fritzbox>
env.fritzbox_password <fritzbox_password>
3. Create symbolic links to /etc/munin/plugins.
3. Create symbolic links to `/etc/munin/plugins`.
4. Restart the munin-node daemon: /etc/init.d/munin-node restart.
4. Restart the munin-node daemon: `/etc/init.d/munin-node restart`.
5. Done. You should now start to see the charts on the Munin pages.
## Localization
Two scripts depend on the language selected in your fritzbox: the uptime and wifi\_devices. Currently, two locales are
supported:
1. German: `de` (default)
2. English: `en`
You can change the used locale by setting an environment variable in your plugin configuration:
env.locale en
## Different hosts for the fritzbox and your system
You can split the graphs of your fritzbox from the localhost graphs by following the next steps:
1. Use the following as your host configuration in `/etc/munin/munin.conf`
[home.yourhost.net;server]
address 127.0.0.1
use_node_name yes
[home.yourhost.net;fritzbox]
address 127.0.0.1
use_node_name no
2. Add the following to your munin-node configuration
env.host_name fritzbox
3. Restart your munin-node: `systemctl restart munin-node`
## Environment Settings
Do not forget to restart the munin-node daemon as described in step 3 of the installation instructions above.

View File

@@ -14,6 +14,7 @@
#%# capabilities=autoconf
"""
import os
import sys
from fritzconnection import FritzConnection
@@ -21,7 +22,7 @@ from fritzconnection import FritzConnection
def print_values():
try:
conn = FritzConnection()
conn = FritzConnection(address=os.environ['fritzbox_ip'])
except Exception as e:
sys.exit("Couldn't get connection uptime")
@@ -37,6 +38,8 @@ def print_config():
print "graph_category network"
print "uptime.label uptime"
print "uptime.draw AREA"
if os.environ.get('host_name'):
print "host_name " + os.environ['host_name']
if __name__ == "__main__":

View File

@@ -22,7 +22,7 @@ import sys
import fritzbox_helper as fh
PAGE = '/system/ecostat.lua'
pattern = re.compile(".*/(StatTemperature)\".*=.*\"(.*?)\"")
pattern = re.compile('Query\s=\s"(\d{1,3})')
def get_cpu_temperature():
@@ -36,7 +36,7 @@ def get_cpu_temperature():
m = re.search(pattern, data)
if m:
print 'temp.value %d' % (int(m.group(2).split(',')[0]))
print 'temp.value %d' % (int(m.group(1)))
def print_config():
@@ -50,6 +50,8 @@ def print_config():
print "temp.graph LINE1"
print "temp.min 0"
print "temp.info Fritzbox CPU temperature"
if os.environ.get('host_name'):
print "host_name " + os.environ['host_name']
if __name__ == '__main__':

View File

@@ -22,7 +22,7 @@ import sys
import fritzbox_helper as fh
PAGE = '/system/ecostat.lua'
pattern = re.compile(".*/(StatCPU)\".*=.*\"(.*?)\"")
pattern = re.compile('Query1\s=\s"(\d{1,3})')
def get_cpu_usage():
@@ -36,7 +36,7 @@ def get_cpu_usage():
m = re.search(pattern, data)
if m:
print 'cpu.value %d' % (int(m.group(2).split(',')[0]))
print 'cpu.value %d' % (int(m.group(1)))
def print_config():
@@ -50,6 +50,8 @@ def print_config():
print "cpu.graph AREA"
print "cpu.min 0"
print "cpu.info Fritzbox CPU usage"
if os.environ.get('host_name'):
print "host_name " + os.environ['host_name']
if __name__ == '__main__':

View File

@@ -22,8 +22,8 @@ import sys
import fritzbox_helper as fh
PAGE = '/system/ecostat.lua'
pattern = re.compile(".*/(StatRAM.*?)\".*=.*\"(.*?)\"")
USAGE_MAPPING = {'StatRAMCacheUsed': 'cache', 'StatRAMPhysFree': 'free', 'StatRAMStrictlyUsed': 'strict'}
pattern = re.compile('Query[1-3]\s="(\d{1,3})')
USAGE = ['free', 'cache', 'strict']
def get_memory_usage():
@@ -36,8 +36,9 @@ def get_memory_usage():
data = fh.get_page(server, sid, PAGE)
matches = re.finditer(pattern, data)
if matches:
for m in matches:
print'%s.value %d' % (USAGE_MAPPING[m.group(1)], int(m.group(2).split(',')[0]))
data = zip(USAGE, [m.group(1) for m in matches])
for d in data:
print'%s.value %s' % (d[0], d[1])
def print_config():
@@ -57,6 +58,8 @@ def print_config():
print "free.label free"
print "free.type GAUGE"
print "free.draw STACK"
if os.environ.get('host_name'):
print "host_name " + os.environ['host_name']
if __name__ == '__main__':

View File

@@ -22,9 +22,8 @@ import sys
import fritzbox_helper as fh
PAGE = '/system/energy.lua'
pattern = re.compile(".*/(.*act?)\".*=.*\"(.*?)\"")
DEVICE_MAPPING = {'rate_abact': 'ab', 'rate_dspact': 'dsl', 'rate_sumact': 'system',
'rate_systemact': 'cpu', 'rate_usbhostact': 'usb', 'rate_wlanact': 'wifi'}
pattern = re.compile('<td>(.+?)"bar\s(act|fillonly)"(.+?)\s(\d{1,3})\s%')
DEVICES = ['system', 'cpu', 'wifi', 'dsl', 'ab', 'usb']
def get_power_consumption():
@@ -37,14 +36,15 @@ def get_power_consumption():
data = fh.get_page(server, sid, PAGE)
matches = re.finditer(pattern, data)
if matches:
for m in matches:
print'%s.value %d' % (DEVICE_MAPPING[m.group(1)], int(m.group(2)))
data = zip(DEVICES, [m.group(4) for m in matches])
for d in data:
print'%s.value %s' % (d[0], d[1])
def print_config():
print "graph_title AVM Fritz!Box Power Consumption"
print "graph_vlabel %"
print "graph_category network"
print "graph_category system"
print "graph_order system cpu wifi dsl ab usb"
print "system.label system"
print "system.type GAUGE"
@@ -82,6 +82,8 @@ def print_config():
print "usb.min 0"
print "usb.max 100"
print "usb.info Fritzbox usb devices power consumption"
if os.environ.get('host_name'):
print "host_name " + os.environ['host_name']
if __name__ == '__main__':

View File

@@ -14,6 +14,7 @@
#%# capabilities=autoconf
"""
import os
import sys
from fritzconnection import FritzConnection
@@ -21,7 +22,7 @@ from fritzconnection import FritzConnection
def print_values():
try:
conn = FritzConnection()
conn = FritzConnection(address=os.environ['fritzbox_ip'])
except Exception as e:
sys.exit("Couldn't get WAN traffic")
@@ -31,13 +32,14 @@ def print_values():
up_traffic = conn.call_action('WANCommonInterfaceConfig', 'GetTotalBytesSent')['NewTotalBytesSent']
print ('up.value %d' % up_traffic)
max_down_traffic = conn.call_action('WANCommonInterfaceConfig', 'GetCommonLinkProperties')[
'NewLayer1DownstreamMaxBitRate']
print ('maxdown.value %d' % max_down_traffic)
if not os.environ.get('traffic_remove_max'):
max_down_traffic = conn.call_action('WANCommonInterfaceConfig', 'GetCommonLinkProperties')[
'NewLayer1DownstreamMaxBitRate']
print ('maxdown.value %d' % max_down_traffic)
max_up_traffic = conn.call_action('WANCommonInterfaceConfig', 'GetCommonLinkProperties')[
'NewLayer1UpstreamMaxBitRate']
print ('maxup.value %d' % max_up_traffic)
max_up_traffic = conn.call_action('WANCommonInterfaceConfig', 'GetCommonLinkProperties')[
'NewLayer1UpstreamMaxBitRate']
print ('maxup.value %d' % max_up_traffic)
def print_config():
@@ -60,14 +62,17 @@ def print_config():
print "up.max 1000000000"
print "up.negative down"
print "up.info Traffic of the WAN interface."
print "maxdown.label received"
print "maxdown.type GAUGE"
print "maxdown.graph no"
print "maxup.label MAX"
print "maxup.type GAUGE"
print "maxup.negative maxdown"
print "maxup.draw LINE1"
print "maxup.info Maximum speed of the WAN interface."
if not os.environ.get('traffic_remove_max'):
print "maxdown.label received"
print "maxdown.type GAUGE"
print "maxdown.graph no"
print "maxup.label MAX"
print "maxup.type GAUGE"
print "maxup.negative maxdown"
print "maxup.draw LINE1"
print "maxup.info Maximum speed of the WAN interface."
if os.environ.get('host_name'):
print "host_name " + os.environ['host_name']
if __name__ == "__main__":

View File

@@ -19,10 +19,18 @@
import os
import re
import sys
import fritzbox_helper as fh
locale = os.environ.get('locale', 'de')
patternLoc = {"de": "(\d+)\s(Tag|Stunden|Minuten)",
"en": "(\d+)\s(days|hours|minutes)"}
dayLoc = {"de": "Tag", "en": "days"}
hourLoc = {"de": "Stunden", "en": "hours"}
minutesLoc = {"de": "Minuten", "en": "minutes"}
PAGE = '/system/energy.lua'
pattern = re.compile(".*/(.*uptime_\w+?)\".*=.*\"(.*?)\"")
pattern = re.compile(patternLoc[locale])
def get_uptime():
@@ -37,10 +45,12 @@ def get_uptime():
if matches:
hours = 0.0
for m in matches:
if m.group(1) == "uptime_hours":
hours += int(m.group(2))
if m.group(1) == "uptime_minutes":
hours += int(m.group(2)) / 60.0
if m.group(2) == dayLoc[locale]:
hours += 24 * int(m.group(1))
if m.group(2) == hourLoc[locale]:
hours += int(m.group(1))
if m.group(2) == minutesLoc[locale]:
hours += int(m.group(1)) / 60.0
uptime = hours / 24
print "uptime.value %.2f" % uptime
@@ -53,6 +63,8 @@ def print_config():
print "graph_category system"
print "uptime.label uptime"
print "uptime.draw AREA"
if os.environ.get('host_name'):
print "host_name " + os.environ['host_name']
if __name__ == '__main__':

View File

@@ -19,10 +19,14 @@
import os
import re
import sys
import fritzbox_helper as fh
locale = os.environ.get('locale', 'de')
patternLoc = {"de": "(\d+) WLAN", "en": "(\d+) wireless LAN"}
PAGE = '/system/energy.lua'
pattern = re.compile("(\d+) WLAN")
pattern = re.compile(patternLoc[locale])
def get_connected_wifi_devices():
@@ -49,6 +53,8 @@ def print_config():
print 'wifi.type GAUGE'
print 'wifi.graph LINE1'
print 'wifi.info Wifi Connections on 2.4 & 5 Ghz'
if os.environ.get('host_name'):
print "host_name " + os.environ['host_name']
if __name__ == '__main__':