pdreker / fritz_exporter

Prometheus exporter for Fritz!Box home routers
Other
155 stars 32 forks source link

No cable data for FritzBox 6660 Cable #134

Open larsf96 opened 1 year ago

larsf96 commented 1 year ago

Hi,

I'm trying to use this exporter to send my FritzBox 6660 Cable Data to Prometheus. But unfortunately it looks like no Docsis related data is being transferred. Although I did not find a suitable Grafana dashboard for cable monitoring, I can't see any of the metrics in Prometheus UI.

I used the data donation tool, the ID is the following: a37fbd2a-18fe-453f-9ce2-4bdc03754685

Maybe I'm doing something wrong?

pdreker commented 1 year ago

My "Testbase" is "DSL only", as I don't have cable internet... So if there are DOCSIS related information on a cable box, I can't see them - that's where the "data donation" feature comes in. - Thanks for your contribution!

I have taken a first look at the data and while there doesn't seem to be much in the way of "detailed internal data" about the cable link (like e.g. attenuation for DSL etc.). There is at least some information in there, but it is superficial (Link State, Connected, Data Transferred etc.).

It simply seems like DSL has a lot more data available to the OS of the box. Maybe the DOCSIS chips are a lot more "black box" or a lot of the data does not make sense in the DOCSIS context.

I will have a look at the data in your donation and will incorpoorate anything which currently is not there into the exporter.

pdreker commented 1 year ago

Just in the spirit of full transparency: the data donation leaked your external IP address to me due to an unsanitized field in the output. Not a dangerous thing, but unintentional.

I have since fixed the donation feature in #135 which will be included in the next release.

larsf96 commented 1 year ago

Thanks for your response! In the UI of FritzBox, I can see a lot more information that are displayed about the DOCSIS channels. As far as I can see, those are all fetched from the data.lua endpoint. Maybe they are exposed differently than the DSL data?

pdreker commented 1 year ago

Currently the exporter is exclusively using the TR-064 API of the devices (using the fritzconnection library). So whatever is not there will currently not show up in the exporter.

I have been considering extending the exporter to collect some more data, which is unavailable from TR-064 but haven't done so so far due to the exporter being ver< tightly coupled to the TR-064 API.

I will check, if I can easily extract more infos from TR-064, which may have been missing so far. Detailed DOCSIS stats and similar information will likely not be in there, but it's a start.

Going for the extended information may require a serious rewrite/refactoring of the code, which not happen quickly, unfortunately.

pdreker commented 1 year ago

I have been tinkering around with the code of the exporter and while this is not even close to being finished, I have also been digging in the (undocumented) HTTP API.

As I do not have a box, which has cable I cannot actually check, what data can be fetched for DOCSIS, but on the DSL side it seems, that I can get all the info, which is visible in the UI.

I have uploaded a small and simple Docker Image at pdreker/fritz_requests on Docker Hub. This image connects to a Fritz Device and requests data from the data.lua "endpoint". Usage is quite simple:

docker run pdreker/fritz_requests:0.0.1 <FRITZ_URL> <USERNAME> <PASSWORD> <PAGE_ID>

Normally FRITZ_URL would be http://fritz.box USERNAME and PASSWORD are self-explanatory. PAGE_ID is the data, which should be returned.

For DOCSIS/Cable information the following page_ids seem to be relevant:

The last two may be just logs and Config options.

Could you check those pages against your box. I would be interested in if they actually work and if they work I'm interested in the data returned (JSON) to see, what I can do with the data.

If sharing the JSON data, please make sure not to disclose private information. ;)

haferm commented 1 year ago

Hi @pdreker, wondering if you got back any feedback from @larsf96 otherwise i can provide you the data requested from a cable box Model 6591 (FW 7.50) output should be similar like 6660. Just let me know and i can share.. The most interesting one for cable users is the docInfo as it contains all the data you need in order to check the connection quality like MSE, Powerlevel, Modulation, etc. As i run into outages very often i have implemented a Shellscript from CT "Kabelfritz-Monitor" and tweaked it a bit and run it via cron in order to write into influxdb via Rest. However as i am running your exporter by default to capture wan stats it would be great if you can maybe add the docinfo into your fritz_exporter.. Also i am happy to do beta testing.. Regards Marco

larsf96 commented 1 year ago

Hi @pdreker

Sorry for the late response, didn't check this issue for a long time.

Here is the information that I extracted from my box (6660 - Version [7.39-104218 BETA])

docSpectrum.txt docOpt.txt docOv.txt docStat.txt docInfo.txt

Let me know if you need anything else

pdreker commented 1 year ago

Thanks @larsf96!

@haferm If you would be willing to provide another dump of at least docInfo that would be neat. Having more than one set of data makes it more reliable to extract data.

regards, Patrick

haferm commented 1 year ago

sure @pdreker

see attached "docInfo.txt" from a FB6591 running latest FW 7.50. For Ref of this data see "FRITZ!Box 6591 Cable.pdf" which is an export from the AVM GUI. Important Data from stressed Cable users you can take from "Ref_from_bashscript.txt" everthing else i would say you can ignore. I have alos created a dashboard "Overview" and "Detailed" see "Grafana_Example.pdf" i can share.

If needed i can provide you another docinfo from an original Providerbox Vodafone (kdg) Modem FB6591 running FW 7.29

Happy to help.

Regards Marco

docInfo.txt FRITZ!Box 6591 Cable.pdf Grafana_Example.pdf Ref_from_bashscript.txt

gmueller2000privat commented 1 year ago

Hi Patrick,

could help with beta testing. I am using an 6591 cable fritz box at home.

Cheers

Gerd

Numblesix commented 9 months ago

Hey i can als help :)

NicolasGoeddel commented 6 months ago

Hi, I am also interested in cable data. I have a Fritzbox 6591 Cable too. Do you need additional data for it?

NicolasGoeddel commented 1 month ago

Is this project still active?

pdreker commented 1 month ago

Yes, it is still active in as far I can sink time into it.

Just to reiterate on the Cable Data issue: this whole piece of software is completely designed around the TR-064 interface of the Fritz Box, or more precisely: the features provided by the fritzconnection library. As to my current knowledge the Fritz Box itself does not provide extensive information about the Cable Link via that interface (or to be more specific: almost none), and consequentially this exporter does not expose that information.

It would require a major extension of the code to actually use an undocumented (as in: not stable/documented) API to extract that information and risk breaking the exporter with new FritzOS versions.

That said: I would really like to have that feature, as it has been requested several times already (see this issue...), but I do not have the neccessary cable internet to actually reverse engineer a useful API approach and I am a hesitant to use an unofficial API, because I do not want to get into that maintenance hell, where I need to follow each and every FritzOS version, to keep the exporter working.

If someone has the capabilities to extract that information from a Fritz Device in a "somewhat stable manner" and is willing to write some code for this, I am more than willing to accept a PR and help in getting this to integrate nicely with the rest of the code, but I myself do not have the time and resources to embark on this major undertaking.

Sorry, I do not have a better answer to this.

regards, Patrick

NicolasGoeddel commented 1 month ago

That's a very good and understandable answer. Thank you.

Since everything seems to be Python code and I am a Python developer myself, I might be able to help here. I never looked into your code until now but I hope I can find a bit of time to dig into it and maybe try something out.

Can I mention you again when I need help from you understanding stuff?