Hello everyone! I'm working on my first NodeManager sensor and so far so good. NodeManager really made it easy to get all the framework of a node running, allowing me to spend my time working on the actual sensor bit. I have managed to get a (cheap Chinese knockoff) BME280 sensor working using the SensorBME280.h sensor. It took a while to figure out how to get it to see my sensor at address 0x76 (see 'Chinese knockoff') but after a bit of fumbling around I now have my first node talking to my controller (Home Assistant).
Temperature, Humidity, Pressure, Signal Quality and Battery for the node all show up as expected, except for one little niggle that bothers me. Pressure doesn't have a unit_of_measurement associated with it. I know I can just fix that in my controller frontend, but I'd really prefer to have my sensors fully inform my controller of what they are reporting.
In a non-NodeManager mysensors node, I would just send a msgPrefix(CHILD_ID, V_UNIT_PREFIX) as the first message for the child to inform the controller what unit_of_measurement the child will be reporting in. My question is... is it possible to do this with the built-in NodeManager SensorBME280 sensor? If so, can anyone supply an example?
Here's where I am currently...
/**********************************
* Sump Pump Monitor
*
* Report water level in Sump and operation of Pump.
* 1) Operates as a MySensors Repeater Node
* 2) Ambient Temperature/Pressure/Humidity recorded via BME280 sensor
*
* ToDo:
* 1) Shock sensor triggers when Pump Motor is running
* 2) Waterproofed pressure sensor at bottom of sump reports calculated water depth
* 3) Waterproofed temperature sensor at bottom of sump reports water temperature
*
**********************************/
/**********************************
* MySensors node configuration
**********************************/
// General settings
#define SKETCH_NAME "SumpPump"
#define SKETCH_VERSION "0.2"
#define MY_NODE_ID 1
//#define MY_DEBUG
// NRF24 radio settings
#define MY_RADIO_NRF24
//#define MY_RF24_ENABLE_ENCRYPTION
//#define MY_RF24_CHANNEL 125
//#define MY_RF24_PA_LEVEL RF24_PA_HIGH
//#define MY_DEBUG_VERBOSE_RF24
//#define MY_RF24_DATARATE RF24_250KBPS
// Message signing settings
//#define MY_SIGNING_SOFT
//#define MY_SIGNING_SOFT_RANDOMSEED_PIN 7
//#define MY_SIGNING_REQUEST_SIGNATURES
//#define MY_SIGNING_ATSHA204
//#define MY_SIGNING_ATSHA204_PIN 4
//#define MY_SIGNING_REQUEST_SIGNATURES
// Advanced settings
#define MY_BAUD_RATE 115200
//#define MY_SMART_SLEEP_WAIT_DURATION_MS 500
#define MY_SPLASH_SCREEN_DISABLED
//#define MY_DISABLE_RAM_ROUTING_TABLE_FEATURE
#define MY_SIGNAL_REPORT_ENABLED
/**********************************
* MySensors gateway configuration
**********************************/
// Common gateway settings
#define MY_REPEATER_FEATURE
/**********************************
* NodeManager configuration
**********************************/
//#define NODEMANAGER_DEBUG ON
#define NODEMANAGER_INTERRUPTS ON
//#define NODEMANAGER_RECEIVE ON
//#define NODEMANAGER_DEBUG_VERBOSE OFF
//#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
#ifdef MY_REPEATER_FEATURE
#define NODEMANAGER_SLEEP OFF // Cannot Sleep if Repeater Node
#else
#define NODEMANAGER_SLEEP ON
#endif
// import NodeManager library (a nodeManager object will be then made available)
#include <MySensors_NodeManager.h>
/**********************************
* Add your sensors
**********************************/
// Ambient Temperature/Humidty/Pressure via BME280
#include <sensors/SensorBME280.h>
#define BME280_ADDRESS (0x76)
#define CHILD_ID_AMBIENT 1
SensorBME280 ambient(CHILD_ID_AMBIENT);
// Battery Level (default child_id 201)
#include <sensors/SensorBattery.h>
SensorBattery battery;
// Radio Signal Quality (default child_id 202)
#include <sensors/SensorSignal.h>
SensorSignal signal;
/**********************************
* Main Sketch
**********************************/
// before
void before() {
/**********************************
* Configure your sensors
**********************************/
// report ambient measurements every 15 minutes
ambient.setReportIntervalMinutes(15);
// report battery level every 60 minutes
battery.setReportIntervalMinutes(60);
// report radio signal level every 10 minutes
signal.setReportIntervalMinutes(10);
// only a pseudo SR_TX_RSSI and SR_UPLINK_QUALITY are available for NRF24
// radio. All other methods return as INVALID.
signal.setSignalCommand(SR_UPLINK_QUALITY);
// 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