Skip to content

Commit 9a485ca

Browse files
committed
Skip parsing of not present devices
Devices which are not present do not return valid (last) data in all cases. As there is no real use in parsing them (last valid data has most likely been scraped already anyways when the device was last present), skip parsing of not present devices.
1 parent 4d38ca7 commit 9a485ca

File tree

4 files changed

+34
-8
lines changed

4 files changed

+34
-8
lines changed

collector.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,12 @@ func (fc *fritzCollector) Collect(ch chan<- prometheus.Metric) {
129129
dev.Name,
130130
)
131131

132-
if dev.Present == 1 && dev.CanMeasureTemp() {
132+
// Not present devices do not carry any more metrics
133+
if dev.Present != 1 {
134+
continue
135+
}
136+
137+
if dev.CanMeasureTemp() {
133138
if err := mustStringToFloatMetric(ch, fc.Temperature, dev.Temperature.FmtCelsius(), &dev); err != nil {
134139
log.Printf("Unable to parse temperature data of \"%s\" : %v\n", dev.Name, err)
135140
}
@@ -138,7 +143,7 @@ func (fc *fritzCollector) Collect(ch chan<- prometheus.Metric) {
138143
}
139144
}
140145

141-
if dev.Present == 1 && dev.CanMeasurePower() {
146+
if dev.CanMeasurePower() {
142147
if err := mustStringToFloatMetric(ch, fc.EnergyWh, dev.Powermeter.FmtEnergyWh(), &dev); err != nil {
143148
log.Printf("Unable to parse energy data of \"%s\" : %v\n", dev.Name, err)
144149
}
@@ -147,13 +152,13 @@ func (fc *fritzCollector) Collect(ch chan<- prometheus.Metric) {
147152
}
148153
}
149154

150-
if dev.Present == 1 && dev.CanMeasureHumidity() {
155+
if dev.CanMeasureHumidity() {
151156
if err := mustStringToFloatMetric(ch, fc.Humidity, dev.Humidity.FmtRelativeHumidity(), &dev); err != nil {
152157
log.Printf("Unable to parse humidity data of \"%s\" : %v\n", dev.Name, err)
153158
}
154159
}
155160

156-
if dev.Present == 1 && dev.IsBatteryPowered() {
161+
if dev.IsBatteryPowered() {
157162
if err := mustStringToFloatMetric(ch, fc.BatteryChargeLevel, dev.BatteryChargeLevel, &dev); err != nil {
158163
log.Printf("Unable to parse battery charge level of \"%s\" : %v\n", dev.Name, err)
159164
}

test/devicelist.metrics

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,25 +37,21 @@ fritzbox_power{device_id="12524 2211244",device_name="SWITCH_3",device_type="FRI
3737
fritzbox_switch_boxlock{device_id="12324 2131421",device_name="SWITCH_1",device_type="FRITZ!DECT 200"} 0
3838
fritzbox_switch_boxlock{device_id="12324 2211244",device_name="SWITCH_2",device_type="FRITZ!DECT 200"} 0
3939
fritzbox_switch_boxlock{device_id="12524 2211244",device_name="SWITCH_3",device_type="FRITZ!DECT 200"} 0
40-
fritzbox_switch_boxlock{device_id="ALWAYS FAILZ",device_name="SWITCH_4_FAILING",device_type="FRITZ!DECT 200"} 1
4140
# HELP fritzbox_switch_devicelock Switching via device disabled 1/0, -1 if not known or error
4241
# TYPE fritzbox_switch_devicelock gauge
4342
fritzbox_switch_devicelock{device_id="12324 2131421",device_name="SWITCH_1",device_type="FRITZ!DECT 200"} 0
4443
fritzbox_switch_devicelock{device_id="12324 2211244",device_name="SWITCH_2",device_type="FRITZ!DECT 200"} 0
4544
fritzbox_switch_devicelock{device_id="12524 2211244",device_name="SWITCH_3",device_type="FRITZ!DECT 200"} 0
46-
fritzbox_switch_devicelock{device_id="ALWAYS FAILZ",device_name="SWITCH_4_FAILING",device_type="FRITZ!DECT 200"} 1
4745
# HELP fritzbox_switch_mode Switch mode 1/0 (manual/automatic), -1 if not known or error
4846
# TYPE fritzbox_switch_mode gauge
4947
fritzbox_switch_mode{device_id="12324 2131421",device_name="SWITCH_1",device_type="FRITZ!DECT 200"} 1
5048
fritzbox_switch_mode{device_id="12324 2211244",device_name="SWITCH_2",device_type="FRITZ!DECT 200"} 1
5149
fritzbox_switch_mode{device_id="12524 2211244",device_name="SWITCH_3",device_type="FRITZ!DECT 200"} 1
52-
fritzbox_switch_mode{device_id="ALWAYS FAILZ",device_name="SWITCH_4_FAILING",device_type="FRITZ!DECT 200"} 1
5350
# HELP fritzbox_switch_state Switch state 1/0 (on/off), -1 if not known or error
5451
# TYPE fritzbox_switch_state gauge
5552
fritzbox_switch_state{device_id="12324 2131421",device_name="SWITCH_1",device_type="FRITZ!DECT 200"} 0
5653
fritzbox_switch_state{device_id="12324 2211244",device_name="SWITCH_2",device_type="FRITZ!DECT 200"} 1
5754
fritzbox_switch_state{device_id="12524 2211244",device_name="SWITCH_3",device_type="FRITZ!DECT 200"} 0
58-
fritzbox_switch_state{device_id="ALWAYS FAILZ",device_name="SWITCH_4_FAILING",device_type="FRITZ!DECT 200"} 0
5955
# HELP fritzbox_temperature Temperature measured at the device sensor in units of 0.1 °C
6056
# TYPE fritzbox_temperature gauge
6157
fritzbox_temperature{device_id="12324 2131421",device_name="SWITCH_1",device_type="FRITZ!DECT 200"} 21

test/devicelist_729.metrics

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ fritzbox_device_info{device_id="12345 0000004",device_name="HKR_3",device_type="
2121
fritzbox_device_info{device_id="12345 0000005",device_name="HKR_4",device_type="Comet DECT",functionbitmask="320",fw_version="03.68",internal_id="24",manufacturer="AVM"} 1
2222
fritzbox_device_info{device_id="12345 0000006",device_name="SW_2",device_type="FRITZ!DECT 210",functionbitmask="35712",fw_version="04.17",internal_id="25",manufacturer="AVM"} 1
2323
fritzbox_device_info{device_id="12345 0000007",device_name="BUTTON_1",device_type="FRITZ!DECT 440",functionbitmask="1048864",fw_version="05.21",internal_id="26",manufacturer="AVM"} 1
24+
fritzbox_device_info{device_id="12345 0000008",device_name="SW_3",device_type="FRITZ!DECT 200",functionbitmask="35712",fw_version="04.16",internal_id="27",manufacturer="AVM"} 1
2425
# HELP fritzbox_device_present Device connected (1) or not (0)
2526
# TYPE fritzbox_device_present gauge
2627
fritzbox_device_present{device_id="12345 0000001",device_name="SW_1",device_type="FRITZ!DECT 200"} 1
@@ -30,6 +31,7 @@ fritzbox_device_present{device_id="12345 0000004",device_name="HKR_3",device_typ
3031
fritzbox_device_present{device_id="12345 0000005",device_name="HKR_4",device_type="Comet DECT"} 1
3132
fritzbox_device_present{device_id="12345 0000006",device_name="SW_2",device_type="FRITZ!DECT 210"} 1
3233
fritzbox_device_present{device_id="12345 0000007",device_name="BUTTON_1",device_type="FRITZ!DECT 440"} 1
34+
fritzbox_device_present{device_id="12345 0000008",device_name="SW_3",device_type="FRITZ!DECT 200"} 0
3335
# HELP fritzbox_energy Absolute energy consumption (in Wh) since the device started operating
3436
# TYPE fritzbox_energy gauge
3537
fritzbox_energy{device_id="12345 0000001",device_name="SW_1",device_type="FRITZ!DECT 200"} 339584

test/devicelist_729.xml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,4 +203,27 @@
203203
<lastpressedtimestamp></lastpressedtimestamp>
204204
</button>
205205
</device>
206+
<device identifier="12345 0000008" id="27" functionbitmask="35712" fwversion="04.16" manufacturer="AVM" productname="FRITZ!DECT 200">
207+
<present>0</present>
208+
<txbusy>0</txbusy>
209+
<name>SW_3</name>
210+
<switch>
211+
<state></state>
212+
<mode></mode>
213+
<lock></lock>
214+
<devicelock></devicelock>
215+
</switch>
216+
<simpleonoff>
217+
<state></state>
218+
</simpleonoff>
219+
<powermeter>
220+
<voltage></voltage>
221+
<power></power>
222+
<energy></energy>
223+
</powermeter>
224+
<temperature>
225+
<celsius></celsius>
226+
<offset></offset>
227+
</temperature>
228+
</device>
206229
</devicelist>

0 commit comments

Comments
 (0)