From 936d30ed47506d853e4bae8ed8f16b6164625058 Mon Sep 17 00:00:00 2001 From: Fredrik Viklund Date: Thu, 25 Apr 2019 21:41:39 +0200 Subject: [PATCH 1/4] New example WaterMeterSensor --- .gitignore | 8 ++ .../WatermeterSensor/WaterMeterSensor.cpp | 122 ++++++++++++++++++ platformio.ini | 20 +++ 3 files changed, 150 insertions(+) create mode 100644 examples/WatermeterSensor/WaterMeterSensor.cpp create mode 100644 platformio.ini diff --git a/.gitignore b/.gitignore index 69afccb7..15683d11 100755 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,11 @@ *.tmp *.part *.rsls + +.pio +.pioenvs +.piolibdeps +.vscode/* +.vscode/.browse.c_cpp.db* +.vscode/c_cpp_properties.json +.vscode/launch.json diff --git a/examples/WatermeterSensor/WaterMeterSensor.cpp b/examples/WatermeterSensor/WaterMeterSensor.cpp new file mode 100644 index 00000000..091e7152 --- /dev/null +++ b/examples/WatermeterSensor/WaterMeterSensor.cpp @@ -0,0 +1,122 @@ +/* +* The MySensors Arduino library handles the wireless radio link and protocol +* between your home built sensors/actuators and HA controller of choice. +* The sensors forms a self healing radio network with optional repeaters. Each +* repeater and gateway builds a routing tables in EEPROM which keeps track of the +* network topology allowing messages to be routed to nodes. +* +* Created by Henrik Ekblad +* Copyright (C) 2013-2017 Sensnology AB +* Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors +* +* Documentation: http://www.mysensors.org +* Support Forum: http://forum.mysensors.org +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* version 2 as published by the Free Software Foundation. +*/ + +/************************** +Motion Sensor + +The following sketch can be used to report back to the controller when a motion sensor attached to the board's pin 3 +triggers. In this example, the board will be put to sleep just after startup and will report a heartbeat every hour. +NodeManager will take care of configuring an interrupt associated to the provided pin so automatically wake up when a +motion is detected and report a V_TRIPPED message back. +*/ + + +/********************************** +* MySensors node configuration +*/ + +// General settings +#define SKETCH_NAME "WaterMeterSensor" +#define SKETCH_VERSION "0.1" +#define MY_BAUD_RATE 115200 +#define MY_NODE_ID 99 + +// NRF24 radio settings +#define MY_RADIO_RF24 + +/*********************************** + * NodeManager configuration + */ + +#define NODEMANAGER_DEBUG ON // Default ON +#define NODEMANAGER_INTERRUPTS ON +#define NODEMANAGER_SLEEP OFF // Default ON +#define NODEMANAGER_RECEIVE ON +#define NODEMANAGER_DEBUG_VERBOSE ON +#define NODEMANAGER_POWER_MANAGER OFF +#define NODEMANAGER_CONDITIONAL_REPORT OFF +#define NODEMANAGER_EEPROM OFF +#define NODEMANAGER_TIME OFF +#define NODEMANAGER_RTC OFF +#define NODEMANAGER_SD OFF +#define NODEMANAGER_HOOKING OFF +#define NODEMANAGER_OTA_CONFIGURATION OFF +#define NODEMANAGER_SERIAL_INPUT OFF + +// import NodeManager library (a nodeManager object will be then made available) +#include + +/*********************************** + * Add your sensors + */ + +#include +SensorWaterMeter waterMeter(3); + +/*********************************** +* Main Sketch +*/ + +// before +void before() { + +/*********************************** +* Configure your sensors +*/ + + // set reporting interval to 30 seconds. + waterMeter.setReportIntervalSeconds(30); + + // call NodeManager before routine + nodeManager.before(); +} + +// presentation +void presentation() { + // call NodeManager presentation routine + nodeManager.presentation(); +} + +// setup +void setup() { + // call NodeManager setup routine + nodeManager.setup(); +} + +// loop +void loop() { + // call NodeManager loop routine + nodeManager.loop(); +} + +#if NODEMANAGER_RECEIVE == ON +// receive +void receive(const MyMessage &message) { + // call NodeManager receive routine + nodeManager.receive(message); +} +#endif + +#if NODEMANAGER_TIME == ON +// receiveTime +void receiveTime(unsigned long ts) { + // call NodeManager receiveTime routine + nodeManager.receiveTime(ts); +} +#endif \ No newline at end of file diff --git a/platformio.ini b/platformio.ini new file mode 100644 index 00000000..1c0aba79 --- /dev/null +++ b/platformio.ini @@ -0,0 +1,20 @@ +; PlatformIO Project Configuration File +; +; Build options: build flags, source filter +; Upload options: custom upload port, speed and extra flags +; Library options: dependencies, extra library storages +; Advanced options: extra scripting +; +; Please visit documentation for the other options and examples +; https://docs.platformio.org/page/projectconf.html + + +[platformio] +src_dir = examples/WatermeterSensor +lib_extra_dirs = P:\software\MySensors\FrameworkDev + +[env:pro8MHzatmega328] +platform = atmelavr +board = pro8MHzatmega328 +framework = arduino +monitor_speed = 115200 \ No newline at end of file From 4397c9f01e6181bb3a20d5ed378d7e258d9030a9 Mon Sep 17 00:00:00 2001 From: Fredrik Viklund Date: Fri, 26 Apr 2019 20:46:43 +0200 Subject: [PATCH 2/4] Bugfix for #458 - don't reset efter sending --- .../WatermeterSensor/WaterMeterSensor.ino | 111 ++++++++++++++++++ nodemanager/Child.cpp | 2 +- 2 files changed, 112 insertions(+), 1 deletion(-) create mode 100644 examples/WatermeterSensor/WaterMeterSensor.ino diff --git a/examples/WatermeterSensor/WaterMeterSensor.ino b/examples/WatermeterSensor/WaterMeterSensor.ino new file mode 100644 index 00000000..e5163e8e --- /dev/null +++ b/examples/WatermeterSensor/WaterMeterSensor.ino @@ -0,0 +1,111 @@ +/* +* The MySensors Arduino library handles the wireless radio link and protocol +* between your home built sensors/actuators and HA controller of choice. +* The sensors forms a self healing radio network with optional repeaters. Each +* repeater and gateway builds a routing tables in EEPROM which keeps track of the +* network topology allowing messages to be routed to nodes. +* +* Created by Henrik Ekblad +* Copyright (C) 2013-2017 Sensnology AB +* Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors +* +* Documentation: http://www.mysensors.org +* Support Forum: http://forum.mysensors.org +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* version 2 as published by the Free Software Foundation. +*/ + +/************************** +Motion Sensor + +The following sketch can be used to report back to the controller when a motion sensor attached to the board's pin 3 +triggers. In this example, the board will be put to sleep just after startup and will report a heartbeat every hour. +NodeManager will take care of configuring an interrupt associated to the provided pin so automatically wake up when a +motion is detected and report a V_TRIPPED message back. +*/ + + +/********************************** +* MySensors node configuration +*/ + +// General settings +#define SKETCH_NAME "WaterMeterSensor" +#define SKETCH_VERSION "1.0" +#define MY_BAUD_RATE 9600 +#define MY_NODE_ID 99 + +// NRF24 radio settings +#define MY_RADIO_RF24 + +/*********************************** + * NodeManager configuration + */ + +#define NODEMANAGER_SLEEP OFF + +// import NodeManager library (a nodeManager object will be then made available) +#include + +/*********************************** + * Add your sensors + */ + +#include +SensorWaterMeter waterMeter(3); + +/*********************************** +* Main Sketch +*/ + +// before +void before() { + +/*********************************** +* Configure your sensors +*/ + + // set reporting interval to 30 seconds. + waterMeter.setReportIntervalSeconds(30); + // set pulse factor to 1000 pulses per m3 + waterMeter.setPulseFactor(1000); + + // call NodeManager before routine + nodeManager.before(); +} + +// presentation +void presentation() { + // call NodeManager presentation routine + nodeManager.presentation(); +} + +// setup +void setup() { + // call NodeManager setup routine + nodeManager.setup(); +} + +// loop +void loop() { + // call NodeManager loop routine + nodeManager.loop(); +} + +#if NODEMANAGER_RECEIVE == ON +// receive +void receive(const MyMessage &message) { + // call NodeManager receive routine + nodeManager.receive(message); +} +#endif + +#if NODEMANAGER_TIME == ON +// receiveTime +void receiveTime(unsigned long ts) { + // call NodeManager receiveTime routine + nodeManager.receiveTime(ts); +} +#endif \ No newline at end of file diff --git a/nodemanager/Child.cpp b/nodemanager/Child.cpp index aa6c481c..d64474c0 100644 --- a/nodemanager/Child.cpp +++ b/nodemanager/Child.cpp @@ -196,7 +196,7 @@ void Child::sendValue(bool force) { if (_format == DOUBLE) nodeManager.sendMessage(_child_id,_type,_value,_float_precision); if (_format == STRING) nodeManager.sendMessage(_child_id,_type,_value_string); // reset the counters - reset(); + if (_value_processing != SUM) reset(); } // print the child value to a device From 86dfa4689b8830c9a23fcb92708a0fe2cb37dd80 Mon Sep 17 00:00:00 2001 From: Fredrik Viklund Date: Fri, 26 Apr 2019 22:02:35 +0200 Subject: [PATCH 3/4] Delete obsolete example version --- .../WatermeterSensor/WaterMeterSensor.cpp | 122 ------------------ 1 file changed, 122 deletions(-) delete mode 100644 examples/WatermeterSensor/WaterMeterSensor.cpp diff --git a/examples/WatermeterSensor/WaterMeterSensor.cpp b/examples/WatermeterSensor/WaterMeterSensor.cpp deleted file mode 100644 index 091e7152..00000000 --- a/examples/WatermeterSensor/WaterMeterSensor.cpp +++ /dev/null @@ -1,122 +0,0 @@ -/* -* The MySensors Arduino library handles the wireless radio link and protocol -* between your home built sensors/actuators and HA controller of choice. -* The sensors forms a self healing radio network with optional repeaters. Each -* repeater and gateway builds a routing tables in EEPROM which keeps track of the -* network topology allowing messages to be routed to nodes. -* -* Created by Henrik Ekblad -* Copyright (C) 2013-2017 Sensnology AB -* Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors -* -* Documentation: http://www.mysensors.org -* Support Forum: http://forum.mysensors.org -* -* This program is free software; you can redistribute it and/or -* modify it under the terms of the GNU General Public License -* version 2 as published by the Free Software Foundation. -*/ - -/************************** -Motion Sensor - -The following sketch can be used to report back to the controller when a motion sensor attached to the board's pin 3 -triggers. In this example, the board will be put to sleep just after startup and will report a heartbeat every hour. -NodeManager will take care of configuring an interrupt associated to the provided pin so automatically wake up when a -motion is detected and report a V_TRIPPED message back. -*/ - - -/********************************** -* MySensors node configuration -*/ - -// General settings -#define SKETCH_NAME "WaterMeterSensor" -#define SKETCH_VERSION "0.1" -#define MY_BAUD_RATE 115200 -#define MY_NODE_ID 99 - -// NRF24 radio settings -#define MY_RADIO_RF24 - -/*********************************** - * NodeManager configuration - */ - -#define NODEMANAGER_DEBUG ON // Default ON -#define NODEMANAGER_INTERRUPTS ON -#define NODEMANAGER_SLEEP OFF // Default ON -#define NODEMANAGER_RECEIVE ON -#define NODEMANAGER_DEBUG_VERBOSE ON -#define NODEMANAGER_POWER_MANAGER OFF -#define NODEMANAGER_CONDITIONAL_REPORT OFF -#define NODEMANAGER_EEPROM OFF -#define NODEMANAGER_TIME OFF -#define NODEMANAGER_RTC OFF -#define NODEMANAGER_SD OFF -#define NODEMANAGER_HOOKING OFF -#define NODEMANAGER_OTA_CONFIGURATION OFF -#define NODEMANAGER_SERIAL_INPUT OFF - -// import NodeManager library (a nodeManager object will be then made available) -#include - -/*********************************** - * Add your sensors - */ - -#include -SensorWaterMeter waterMeter(3); - -/*********************************** -* Main Sketch -*/ - -// before -void before() { - -/*********************************** -* Configure your sensors -*/ - - // set reporting interval to 30 seconds. - waterMeter.setReportIntervalSeconds(30); - - // call NodeManager before routine - nodeManager.before(); -} - -// presentation -void presentation() { - // call NodeManager presentation routine - nodeManager.presentation(); -} - -// setup -void setup() { - // call NodeManager setup routine - nodeManager.setup(); -} - -// loop -void loop() { - // call NodeManager loop routine - nodeManager.loop(); -} - -#if NODEMANAGER_RECEIVE == ON -// receive -void receive(const MyMessage &message) { - // call NodeManager receive routine - nodeManager.receive(message); -} -#endif - -#if NODEMANAGER_TIME == ON -// receiveTime -void receiveTime(unsigned long ts) { - // call NodeManager receiveTime routine - nodeManager.receiveTime(ts); -} -#endif \ No newline at end of file From d1f932432d8425d4fac63f654660148475eee011 Mon Sep 17 00:00:00 2001 From: Fredrik Viklund Date: Tue, 30 Apr 2019 16:25:38 +0200 Subject: [PATCH 4/4] Removed changes to .gitignore and platformio.ini --- .gitignore | 8 -------- platformio.ini | 20 -------------------- 2 files changed, 28 deletions(-) delete mode 100644 platformio.ini diff --git a/.gitignore b/.gitignore index 15683d11..69afccb7 100755 --- a/.gitignore +++ b/.gitignore @@ -5,11 +5,3 @@ *.tmp *.part *.rsls - -.pio -.pioenvs -.piolibdeps -.vscode/* -.vscode/.browse.c_cpp.db* -.vscode/c_cpp_properties.json -.vscode/launch.json diff --git a/platformio.ini b/platformio.ini deleted file mode 100644 index 1c0aba79..00000000 --- a/platformio.ini +++ /dev/null @@ -1,20 +0,0 @@ -; PlatformIO Project Configuration File -; -; Build options: build flags, source filter -; Upload options: custom upload port, speed and extra flags -; Library options: dependencies, extra library storages -; Advanced options: extra scripting -; -; Please visit documentation for the other options and examples -; https://docs.platformio.org/page/projectconf.html - - -[platformio] -src_dir = examples/WatermeterSensor -lib_extra_dirs = P:\software\MySensors\FrameworkDev - -[env:pro8MHzatmega328] -platform = atmelavr -board = pro8MHzatmega328 -framework = arduino -monitor_speed = 115200 \ No newline at end of file