mcktr / check_tr64_fritz Goto Github PK
View Code? Open in Web Editor NEWIcinga 2 Plugin to check a Fritz!Box
License: GNU General Public License v2.0
Icinga 2 Plugin to check a Fritz!Box
License: GNU General Public License v2.0
hello
which permission have to be working
execvpe(/usr/lib/nagios/pluginsCustom/check_tr64_fritz) failed: Permission denied
i have done a
chmod -R +x check_tr64_fritz
and a restart of icinga2 but still the same information
This needs some more research, maybe it is not possible (now).
It would be nice to have the current battery status in the thermometer check function and exit with a warning or critical status code if the threshold is to low.
I searched a bit through the AVM documentation and it seems that the value can't be fetched through TR-064.
Some of the actions we are using are deprecated and should not used anymore. We should review them and use the newer functions instead.
Hello,
my downloadrate is 1150 mbit/s on the fritzbox. But the plugin output write only 525 Mbit/s. Can you check it?
<?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<s:Body>
<u:X_AVM-DE_GetOnlineMonitorResponse xmlns:u="urn:dslforum-org:service:WANCommonInterfaceConfig:1">
<NewTotalNumberSyncGroups>2</NewTotalNumberSyncGroups>
<NewSyncGroupName>sync_cable</NewSyncGroupName>
<NewSyncGroupMode>CABLE</NewSyncGroupMode>
<Newmax_ds>65632291</Newmax_ds>
<Newmax_us>7188253</Newmax_us>
<Newds_current_bps>2271,5811,1995,2799,3633,5108,6104,7659,8426,6269,1641,3226,7636,1769,1029,392,478,193,523,3998</Newds_current_bps>
<Newmc_current_bps>51,17,68,85,34,103,34,17,68,34,51,34,17,51,34,51,34,0,51,17</Newmc_current_bps>
<Newus_current_bps>2383,32496,5589,12254,18143,805,41492,50183,55369,41257,3159,13231,880,1772,1048,351,483,261,585,1725</Newus_current_bps>
<Newprio_realtime_bps>945,400,473,11,72,39,23,227,683,384,61,521,11,23,618,11,48,26,0,1093</Newprio_realtime_bps>
<Newprio_high_bps>95,191,72,143,0,48,23,48,51,208,140,97,828,844,71,95,0,48,0,223</Newprio_high_bps>
<Newprio_default_bps>1502,32065,5168,12332,18153,825,41380,49954,54934,41157,3090,12677,473,2455,434,350,491,328,593,592</Newprio_default_bps>
<Newprio_low_bps>0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</Newprio_low_bps>
</u:X_AVM-DE_GetOnlineMonitorResponse>
</s:Body>
</s:Envelope>
OK - Downstream 525 Mbit/s | 'downstream_rate'=525;;;;
The update check often returns a warning state but no update is available.
The check returns the following output:
WARNING - Update State: Stopped
I guess the update mechanism on the FritzBox itself only run in a certain interval and between a restart and the first run of the update mechanism the state is stopped. But this needs further investigation.
But imho the warning state is wrong here, unknown would be better.
Consider to add check functions for the Fritz!Box Telefonie feature
Docs: https://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/X_contactSCPD.pdf
Implement (if possible) the function to check the battery status of a Fritz!Fon.
When calling the script without attributes, it says that the function is unknown. There should be a proper error message.
Example:
./check_tr64_fritz
UNKNOWN - Unknown function
The error message now is just wrong.
Consider to make some attributes mandatory.
hello
would it be possible to have the upstreamrate + downstreamrate as a Unit with negativ and possitive number. like down is negativ and upstream is possitiv.
so with gaphiphte it would Show, if possible, a graph with both Information?
have a nice day
vinc
Mention in the documentation how to enable TR-064 on a FritzBox.
Introduce a Changelog
Reminder for enhancing the installation documentation.
Consider reserved options.
There are a few reserved options that should not be used for other purposes:
-V version (--version)
-h help (--help)
-t timeout (--timeout)
-w warning threshold (--warning)
-c critical threshold (--critical)
-H hostname (--hostname)
-v verbose (--verbose)
In addition to the reserved options above, some other standard options are:
-C SNMP community (--community)
-a authentication password (--authentication)
-l login name (--logname)
-p port or password (--port or --passwd/--password)monitors operational
-u url or username (--url or --username)
If you use an index for a smart home device which doesn't exist, you'll get erroneous output.
$ ./check_tr64_fritz -P <PASSWORD> -f thermometer:7 -d
<?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<s:Body>
<s:Fault>
<faultcode>s:Client</faultcode>
<faultstring>UPnPError</faultstring>
<detail>
<UPnPError xmlns="urn:dslforum-org:control-1-0">
<errorCode>713</errorCode>
<errorDescription>SpecifiedArrayIndexInvalid</errorDescription>
</UPnPError>
</detail>
</s:Fault>
</s:Body>
</s:Envelope>
(standard_in) 1: syntax error
CRITICAL - - °C | thermometer_current_state=2;0;0;0;0
Create documentation for development
Please add the functionality to monitor the current up- and downstream.
Hi,
which annoys me for a long time is the fact that's not possible to forward the Events/Logfiles from FRITZ!Box to a syslog/syslog-ng/rsyslog server ...
OK, with Freetz it is/was possible but it's not the way that i like ...
Do you know if it's possible to grab the FRITZ!Box events via tr64 protocol?
Ulli
Hi,
I don't understand the purpose of the warning and critical levels for Downstream and Upstream checks. If for example I have a DSL line with max. 100Mbit/s DownstreamI get in 110Mbit/s connection rate in the DSL settings of the Fritz!Box.
I would like to check that the DSL connection is at least 100Mbit (warning level) and at least 80Mbit/s (critical level).
In the current version of check_tr64_fritz I get a critical status if I try to set this two levels in this way:
./check_tr64_fritz -h "192.168.187.1" -p "49443" -P "supersecret" -f "downstream" -w 100 -c 80
CRITICAL - Downstream 110 Mbit/s | downstream_rate=110 warn=100 crit=80
I think you should invers the logic for the Downstream and Upstream warning and critical levels to get a warning and critical alarm if the connection rate is lower than connection rate, as I get an OK status today if I set the warning and critical level higher as the expected connection rate:
./check_tr64_fritz -h "192.168.187.1" -p "49443" -P "supersecret" -f "downstream" -w 120 -c 150
OK - Downstream 110 Mbit/s | downstream_rate=110 warn=120 crit=150
Ulli
Thanks to @uclara for this proposal, see #38 (comment)
For the functions downstreamrate/upstreamrate it would make sense to introduce the warning/critical calculation and check if the value is above a certain value.
I looked at the code and know, that the functions have different endpoint urls, so this change would mean more than one request per script call. But as it is currently handled, the script does not help us at all, we would have to implement 5 different services just to get the information of one of our multiple Fritz!Boxes.
We would like to have at least the status, linkuptime, downstreamrate and upstreamrate bundled as information.
If you say, no way. I'll try to write a wrapper for this.
When setting the -d
parameter the script is expecting an argument for it.
Reproduce:
$ ./check_tr64_fritz -P <PASSWORD> -f status -d
./check_tr64_fritz: Diese Option erfordert ein Argument -- d
usage: check_tr64_fritz -h <HOSTNAME> -p <PORT> -u <USERNAME> -P <PASSWORD> -f <FUNCTION> -w <WARNING> -c <CRITICAL>
-h: IP-Adress or hostname from the Fritz!Box
default = fritz.box
-p: SSL-Port from the Fritz!Box
default = 49443
-u: Login Username for the Fritz!Box
default = dslf-config
-P: Login Password for the Fritz!Box
[....]
The function with metrics just return the current sate as metric. It would be useful to return the warning/critical metrics as well.
Before releasing 2.0 don't forget to updating the file icingaexchange.yml
Consider to add new functions for the Fritz!Box Smart Home feature.
AVM Docs: https://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_homeauto.pdf
Currently there is no CheckCommand definition which is shipped with this check plugin. It make sense to add this to the docs.
Hello,
the script always returns UNKNOWN - Could not get a response | status=3
for me.
-d
claims I'm using the wrong password, which I can rule out as I'm using the same credentials to log into the webinterface using copy&paste:
./check_tr64_fritz -d -h fritz.box -p 49443 -u redacted -P redacted -f status
<HTML>
<HEAD>
<TITLE>401 Unauthorized (ERR_ACCESS_DENIED)</TITLE>
</HEAD>
<BODY>
<H1>401 Unauthorized</H1><BR>ERR_ACCESS_DENIED<HR><B>Webserver</B> Sat, 11 Nov 2017 15:46:31 GMT
</BODY>
</HTML>
Oddly enough the reponse looks very different when I remove -d
:
./check_tr64_fritz -h fritz.box -p 49443 -u redacted -P redacted -f status
<?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<s:Body>
<s:Fault>
<faultcode>s:Client</faultcode>
<faultstring>UPnPError</faultstring>
<detail>
<UPnPError xmlns="urn:dslforum-org:control-1-0">
<errorCode>402</errorCode>
<errorDescription>Invalid Args</errorDescription>
</UPnPError>
</detail>
</s:Fault>
</s:Body>
</s:Envelope>
Environment:
FritzBox 6360 Cable (Kabel Deutschland)
FRITZ!OS 06.54
For graphing it is very useful to have some performance data.
I am not satisfied with the README, before 2.0 a enhancement/improvement is necessary
Hi,
thanks for your fetch_tr64_data.sh tool and the example ./fetch_tr64_data.sh -P [PASSWORD] -U deviceinfo -s DeviceInfo -a GetInfo ...
I see that not all FRITZ!Box logs will be read, but I'm far away to understand the AVM documentation to create or extend the searches. Could you please give a few more examples maybe with explanation where in the AVM documentation I can find the necessary parameters?
Thanks a lot!
Ulli
We should improve the performance data output, because it is very confusing while creating graph dashboard from it. See #48
https://www.icinga.com/2017/11/23/icinga-exchange-a-new-era/
object CheckCommand "check_tr64_fritz" {
command = [ PluginDir + "/check_tr64_fritz" ]
arguments = {
"-h" = "$fritz_host$"
"-p" = "$fritz_port$"
"-u" = "$fritz_username$"
"-P" = "$fritz_password$"
"-f" = "$fritz_function$"
"-w" = "$fritz_warning$"
"-c" = "$fritz_critical$"
}
vars.fritz_host = "$address$"
vars.fritz_port = "49443"
vars.fritz_username = "dslf-config"
vars.fritz_function = "status"
}
Where do you store fritz_password
?
There are multiple device types out there, I'll guess that they all provide the same features and uses the same TR-064 functions, but this needs to be verified.
Currently I don't have such devices here.
https://avm.de/produkte/fritzdect/fritzdect-200/
https://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_homeauto.pdf
Add a parameter that print out the help/usage page, currently there is no dedicated parameter for it. The help page should also print out the version number.
Since -h
is occupied, maybe -v
(--version
) is a good alternative?
In the last couple of months there where not many activity on this project from my side. I want to clarify what is going to happen with this project and why there are was so less activity.
First things first I am still interested in to develop a check plugin to monitor a Fritz!Box and (if possible) connected smart devices.
I had a few issues with the implementation in Bash and the check plugin became hard to maintain. Lately I struggled to implement new features into the plugin due to its complexity and over time gained function scope. This plugin was created in my beginnings of writing Bash scripts, therefore some issues are related to my inexperienced myself. Nowadays, with more experience, I would do a few things different.
A quite time ago I decided to go the long way and re-write the whole check plugin in Golang to tackle the issues I had with the implementation in Bash. The result of the re-write can be found here: https://github.com/mcktr/check_fritz.
What happens with the Bash implementation? Since this check plugin works in the current version I'll leave it as it is. I plan to release a last release to tackle a few bugs and to merge outstanding pull requests. But new features will only be implemented in the Golang version.
If you are interested in a actively maintained check plugin to monitor a Fritz!Box I invite you to test the re-write in Golang. I also highly appreciate contribution in any form (test feedback, feature requests, bug reports) for the Golang version, you don't need to be a Golang developer to contribute. :-)
After #29 is merged, we need to ensure that all (supported) functions are working correctly when warning/critical values are set.
This is necessary due a change on the internal check_greater
function.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.