From 2343d8ae8fb72bdcab467b158eb77c09af6fda5d Mon Sep 17 00:00:00 2001 From: Henrik Ekblad Date: Tue, 4 Aug 2015 21:38:10 +0200 Subject: [PATCH] Added sendHeatbeat() Allow a sensor to send a "dummy" message to controller to say "I'm still alive!". The payload will be an incremental uint16. --- libraries/MySensors/MyMessage.h | 3 ++- libraries/MySensors/MySensor.cpp | 5 +++++ libraries/MySensors/MySensor.h | 7 +++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/libraries/MySensors/MyMessage.h b/libraries/MySensors/MyMessage.h index 129801f..03a203c 100644 --- a/libraries/MySensors/MyMessage.h +++ b/libraries/MySensors/MyMessage.h @@ -146,7 +146,8 @@ typedef enum { I_BATTERY_LEVEL, I_TIME, I_VERSION, I_ID_REQUEST, I_ID_RESPONSE, I_INCLUSION_MODE, I_CONFIG, I_FIND_PARENT, I_FIND_PARENT_RESPONSE, I_LOG_MESSAGE, I_CHILDREN, I_SKETCH_NAME, I_SKETCH_VERSION, - I_REBOOT, I_GATEWAY_READY, I_REQUEST_SIGNING, I_GET_NONCE, I_GET_NONCE_RESPONSE + I_REBOOT, I_GATEWAY_READY, I_REQUEST_SIGNING, I_GET_NONCE, I_GET_NONCE_RESPONSE, + I_HEARTBEAT } mysensor_internal; diff --git a/libraries/MySensors/MySensor.cpp b/libraries/MySensors/MySensor.cpp index 9d6ecb8..5558d6a 100644 --- a/libraries/MySensors/MySensor.cpp +++ b/libraries/MySensors/MySensor.cpp @@ -487,6 +487,11 @@ void MySensor::sendBatteryLevel(uint8_t value, bool enableAck) { sendRoute(build(msg, nc.nodeId, GATEWAY_ADDRESS, NODE_SENSOR_ID, C_INTERNAL, I_BATTERY_LEVEL, enableAck).set(value)); } +void MySensor::sendHeartbeat(void) { + sendRoute(build(msg, nc.nodeId, GATEWAY_ADDRESS, NODE_SENSOR_ID, C_INTERNAL, I_HEARTBEAT, false).set(heartbeat++)); + +} + void MySensor::present(uint8_t childSensorId, uint8_t sensorType, const char *description, bool enableAck) { sendRoute(build(msg, nc.nodeId, GATEWAY_ADDRESS, childSensorId, C_PRESENTATION, sensorType, enableAck).set(childSensorId==NODE_SENSOR_ID?LIBRARY_VERSION:description)); } diff --git a/libraries/MySensors/MySensor.h b/libraries/MySensors/MySensor.h index 0a54987..9b9e8dd 100644 --- a/libraries/MySensors/MySensor.h +++ b/libraries/MySensors/MySensor.h @@ -219,6 +219,12 @@ class MySensor */ void sendBatteryLevel(uint8_t level, bool ack=false); + /** + * Send a heartbeat message (I'm alive!) to the gateway/controller. + * The payload will be an incremental 16 bit integer value starting at 1 when sensor is powered on. + */ + void sendHeartbeat(void); + /** * Requests a value from gateway or some other sensor in the radio network. * Make sure to add callback-method in begin-method to handle request responses. @@ -373,6 +379,7 @@ class MySensor char convBuf[MAX_PAYLOAD*2+1]; #endif uint8_t failedTransmissions; + uint16_t heartbeat; void (*timeCallback)(unsigned long); // Callback for requested time messages void (*msgCallback)(const MyMessage &); // Callback for incoming messages from other nodes and gateway.