Skip to content

Commit 01e6be3

Browse files
authored
Add option to prevent a sensor to report to the gateway (#386)
1 parent 1020a3b commit 01e6be3

File tree

3 files changed

+15
-1
lines changed

3 files changed

+15
-1
lines changed

NodeManagerLibrary.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -590,6 +590,8 @@ class Sensor {
590590
// [14] manually turn the power off
591591
void powerOff();
592592
#endif
593+
// [21] enable/disable reporting to the gateway (default: true)
594+
void setReporting(bool value);
593595
// [17] After how many minutes the sensor will report back its measure (default: 10 minutes)
594596
void setReportIntervalSeconds(int value);
595597
// [16] After how many minutes the sensor will report back its measure (default: 10 minutes)
@@ -650,6 +652,7 @@ class Sensor {
650652
int _pin = -1;
651653
int _samples = 1;
652654
int _samples_interval = 0;
655+
bool _reporting = true;
653656
#if FEATURE_INTERRUPTS == ON
654657
int _interrupt_pin = -1;
655658
#endif

NodeManagerLibrary.ino

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -595,6 +595,11 @@ int Sensor::getInterruptPin() {
595595
}
596596
#endif
597597

598+
// enable/disable reporting to the gateway
599+
void Sensor::setReporting(bool value) {
600+
_reporting = value;
601+
}
602+
598603
// After how many seconds the sensor will report back its measure
599604
void Sensor::setReportIntervalSeconds(int value) {
600605
_report_timer->start(value,SECONDS);
@@ -713,7 +718,7 @@ void Sensor::loop(MyMessage* message) {
713718
if (_samples_interval > 0) _node->sleepOrWait(_samples_interval);
714719
}
715720
// send the value back to the controller
716-
child->sendValue(message != nullptr);
721+
if (_reporting) child->sendValue(message != nullptr);
717722
// reset the counters
718723
child->reset();
719724
}
@@ -3304,6 +3309,9 @@ Display::Display(NodeManager& node_manager, int child_id): Sensor(node_manager)
33043309
// We don't need any sensors, but we need a child, otherwise the loop will never be executed
33053310
children.allocateBlocks(1);
33063311
new ChildString(this, _node->getAvailableChildId(child_id), S_INFO, V_TEXT,_name);
3312+
// prevent reporting to the gateway at each display update
3313+
setReporting(false);
3314+
_report_timer->unset();
33073315
}
33083316
// setter/getter
33093317
void Display::setCaption(const char* value) {
@@ -4354,6 +4362,7 @@ void SensorConfiguration::onReceive(MyMessage* message) {
43544362
case 17: sensor->setReportIntervalSeconds(request.getValueInt()); break;
43554363
case 19: sensor->setReportIntervalHours(request.getValueInt()); break;
43564364
case 20: sensor->setReportIntervalDays(request.getValueInt()); break;
4365+
case 21: sensor->setReporting(request.getValueInt()); break;
43574366
default: return;
43584367
}
43594368
} else {

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,8 @@ The following methods are available for all the sensors:
366366
// [14] manually turn the power off
367367
void powerOff();
368368
#endif
369+
// [21] enable/disable reporting to the gateway (default: true)
370+
void setReporting(bool value);
369371
// [17] After how many minutes the sensor will report back its measure (default: 10 minutes)
370372
void setReportIntervalSeconds(int value);
371373
// [16] After how many minutes the sensor will report back its measure (default: 10 minutes)

0 commit comments

Comments
 (0)