fetzerch / fritzcollectd

A collectd plugin for monitoring AVM FRITZ!Box routers
MIT License
132 stars 30 forks source link

Does this plugin support fritzdect-200 power consumtion readout? #25

Open DSDV opened 6 years ago

DSDV commented 6 years ago

Hello, i want to use the Fritz Dect 200 to messure my power consumption for diffrent setups. at the moment i plan to use 3 devices. https://en.avm.de/products/fritzdect/fritzdect-200/ does this plugin allow to grab the data of the devices?

with kind regards

PS: sorry for my bad english

fetzerch commented 6 years ago

Currently fritzcollectd has only rudimentary support of dect devices. Mainly because I don't have any DECT devices for testing here.

The following values are reported to collectd: multimeter power, multimeter energy, switch state and temperature. Currently they are reported as dect-0 ... dect-X, and it's not optimal to find out which is what.

Also there's currently no support for dect devices in my dashboard on grafana.com. But you can add that easily.

DSDV commented 6 years ago

Hm .. that seems to be ok đź‘Ť i only want to show how much energy consumtion each of the dect devices report maybe as graph so you can see where the peek times of powerconsumtion are.

if i donate you a dect 200 would that increase your support for that device?

conrad784 commented 5 years ago

I just noticed, the ordering of my devices changed after restart of collectd (dect4 is suddenly dect3). Maybe I will find some time to debug this further, or even implement some kind of name resolution.

chris-hoe commented 4 years ago

I have a setup with multiple (>10) DECT200 boxes and they're mixed up on every reboot or restart which is quite annoying because you have to do the identification job again (which id is which box) and (even more important) because history data gets wrong when you correct the id-to-box assignment because in influxdb data is organised by the "1-dectX" id and this id is/might be re-assigned to a different device on restart/reboot. Would be great if that's possible to fix as it renders history data useless.

chris-hoe commented 4 years ago

I've found a simple solution to the DECT200 devices getting mixed up on restart/reboot: I've changed the query that way that fritzcollect adds the AIN to the name instead of the id. This way the id can change (and will) but the values are always logged to the same series because the AIN is constant. I replaced line 80/81: (ServiceAction('X_AVM-DE_Homeauto:1', 'GetGenericDeviceInfos', 'NewIndex', 'NewIndex', 'dect'), with: (ServiceAction('X_AVM-DE_Homeauto:1', 'GetGenericDeviceInfos', 'NewIndex', 'NewAIN', 'dect'), and the instance names change to something like this "1-dectxxxxx yyyyyy" where xxxxx yyyyyy is the AIN which will never change for a certain DECT200 box.

jum commented 4 years ago

I used 'NewDeviceName' instead of 'NewAIN', this way I can see the device names I have used for the DECT 200 devices.

DennisCor commented 4 years ago

I've found a simple solution to the DECT200 devices getting mixed up on restart/reboot: I've changed the query that way that fritzcollect adds the AIN to the name instead of the id. This way the id can change (and will) but the values are always logged to the same series because the AIN is constant. I replaced line 80/81: (ServiceAction('X_AVM-DE_Homeauto:1', 'GetGenericDeviceInfos', 'NewIndex', 'NewIndex', 'dect'), with: (ServiceAction('X_AVM-DE_Homeauto:1', 'GetGenericDeviceInfos', 'NewIndex', 'NewAIN', 'dect'), and the instance names change to something like this "1-dectxxxxx yyyyyy" where xxxxx yyyyyy is the AIN which will never change for a certain DECT200 box.

In wich file I have to edit the code or do I need to reinstall collectd and edit the "init.py"?

jum commented 4 years ago

Just check where fritzcollectd ended up being installed using "pip show fritzcollectd". I used a patch like this for my modification:

diff -u __init__.py.orig __init__.py
--- __init__.py.orig    2020-04-09 17:49:08.000000000 +0200
+++ __init__.py 2020-04-09 18:01:45.000000000 +0200
@@ -78,7 +78,7 @@
           Value('linkdownstreammax', 'bitrate'),
           'NewLayer1UpstreamMaxBitRate': Value('linkupstreammax', 'bitrate')}),
         (ServiceAction('X_AVM-DE_Homeauto:1', 'GetGenericDeviceInfos',
-                       'NewIndex', 'NewIndex', 'dect'),
+                       'NewIndex', 'NewDeviceName', ''),
          {'NewMultimeterPower': Value('power', 'power'),
           'NewMultimeterEnergy': Value('energy', 'power'),
           'NewTemperatureCelsius': Value('temperature', 'temperature'),
DennisCor commented 4 years ago

Just check where fritzcollectd ended up being installed using "pip show fritzcollectd". I used a patch like this for my modification:

diff -u __init__.py.orig __init__.py
--- __init__.py.orig    2020-04-09 17:49:08.000000000 +0200
+++ __init__.py 2020-04-09 18:01:45.000000000 +0200
@@ -78,7 +78,7 @@
           Value('linkdownstreammax', 'bitrate'),
           'NewLayer1UpstreamMaxBitRate': Value('linkupstreammax', 'bitrate')}),
         (ServiceAction('X_AVM-DE_Homeauto:1', 'GetGenericDeviceInfos',
-                       'NewIndex', 'NewIndex', 'dect'),
+                       'NewIndex', 'NewDeviceName', ''),
          {'NewMultimeterPower': Value('power', 'power'),
           'NewMultimeterEnergy': Value('energy', 'power'),
           'NewTemperatureCelsius': Value('temperature', 'temperature'),

Thanks for your fast response Jum. With "pip show fritzcollectd" I figured out where fritzcollectd is saved. I have no clue how to write a patch. So I changed the "init.py" directly with nano. But now I don't get any Data anymore. Cancel the change don’t bring it back to work, "sudo apt-get update && sudo apt-get -y upgrade" just like that. So unfortunately, I think I have to reinstall my system.

jum commented 4 years ago

I would say you changed the white space while editing the python code, and python is very sensitive to white space changes (it is part of the language's syntax). I would try to move the backup copy of that file (before you started editing) in place and try again, really obeying python syntax rules. If you do not have any backup of the file from before editing, you will have to use:

pip install --force-reinstall fritzcollectd

To get back a clean install dir.

DennisCor commented 4 years ago

Now I learned how to make updates with a patch. A Really useful thing, thank you. But with your diff it won't work nevertheless. I think it should be + 'NewIndex', 'NewDeviceName', 'dect'), instead of + 'NewIndex', 'NewDeviceName', ''), ?

I changed it that way and now it continues collecting data. In influx/grafana the instance = 1-NameOfMyDect200 apears. But the values are still saved to instance = 1-dect0 like before !?

And by the way, could someone tell me in wich units the values are ? Energy = W and Power = Wh ? or is it kW ?

jum commented 4 years ago

Now I learned how to make updates with a patch. A Really useful thing, thank you. But with your diff it won't work nevertheless. I think it should be + 'NewIndex', 'NewDeviceName', 'dect'), instead of + 'NewIndex', 'NewDeviceName', ''), ?

I changed it that way and now it continues collecting data. In influx/grafana the instance = 1-NameOfMyDect200 apears. But the values are still saved to instance = 1-dect0 like before !?

This is exactly the reason why I made that 'dect' string the empty string, I just wanted to use my own chosen name. I have not researched more into the 'NewIndex' thing, as this causes the name to be '1-myName', but this was not really a concern to me as I could easily filter that using a regular expression in Grafana/Influx, where I view my collectd data.

And by the way, could someone tell me in wich units the values are ? Energy = W and Power = Wh ? or is it kW ?

I used in my graphs for power the label W, and it corresponded pretty much to what was going through when I turned on the electric kettle. I did not graph energy, I believed it to be not important for my usage case.

DennisCor commented 4 years ago

Now I learned how to make updates with a patch. A Really useful thing, thank you. But with your diff it won't work nevertheless. I think it should be + 'NewIndex', 'NewDeviceName', 'dect'), instead of + 'NewIndex', 'NewDeviceName', ''), ? I changed it that way and now it continues collecting data. In influx/grafana the instance = 1-NameOfMyDect200 apears. But the values are still saved to instance = 1-dect0 like before !?

This is exactly the reason why I made that 'dect' string the empty string, I just wanted to use my own chosen name. I have not researched more into the 'NewIndex' thing, as this causes the name to be '1-myName', but this was not really a concern to me as I could easily filter that using a regular expression in Grafana/Influx, where I view my collectd data.

You are right, I forgot to reboot. Now everything works the way I want. Thank you for your help.

UweBeckert commented 3 years ago

Thanks for the patch. I had also the problem, that the dect numbers changes during night when my FritzBox gets a new DSL connection. I'm very happy to have my own assigned names now in Grafana.

Can this change be made officially in github, @fetzerch ?

I monitor temperature, power consumption and switch state in an own Grafana dashboard. I have also plugged in 2 solar modules into a FritzDect200, so I can see how much power they produce.

tomikais commented 3 years ago

Hi @UweBeckert, I also want to do this. Can you please provide/share your Grafana dashboard :-) Thank you!