@skywatch I am not aware of any unfortunately.
If you don't have any repeaters, the return value of send will tell you that the node got an hardware ack from the gateway.
If you have repeaters, you'll need software ack. Such an acknowledgement will ask the gateway to echo back the message, When the message is echoed back, the receive() function on the node will be triggered. You can examine the contents of the echoed message and match it against the message(s) the node has sent. You'll need to implement a timer or similar on the node to resend if the node doesn't receive the echo.
None of these methods will provide acknowledgement from the controller.
The best way to get acknowledgement from the controller is probably to let the node set a value, wait a bit and then ask the controller for the value. If the value is correct, the controller probably received the message.
I say probably, because depending on what data you send you could get an old value that happens to be the same as the new value. Example: Door is opened. The node sends true to the controller, but the message is lost along the way. The door is closed before the message times out so the node sends false to the controller. The node then asks the controller for the value for the door and receives false. Is this the new false or the an old false that was sent yesterday when the door was closed? Impossible to know. But good for the burglar who got in undetected.