Robot mower ignores the rain, MySensors to the rescue!
-
Hello,
I've just started with Domoticz and a NodeMCU MySensors gateway and various Nano's (Finally they can be put to use!). Firstly, the recent acknowledge changes in Domoticz seem to work great, returning an error if the node is unreachable! Thanks.
My question is, I have a number of flows that send an action to one of my relay nodes. i.e. if a rain / moisture node reports either rain or moisture, toggle relay node (I'm actually just closing the 2 rain sensor dimples of my robot mower with a digital pin and gnd to imitate rain, the sensor itself is useless at detecting rain, hence why I'm here!).
The issue is, the node relay is attached to the mower itself, which might be out of range cutting the garden. I'd also like the option of sleeping the sensor as it will need to be battery powered?... What I'd like is for the toggle to be resent until it's successful, instead of just once (which might fail, thanks to the recent ack changes). Any ideas? Perhaps I'm missing another way of achieving this?
Thank you in advance,
Mark
-
@Mark-Swift I'd like to help, but I'm not exactly sure what it is you're looking for. Could you be more specific? What is it that you want to accomplish. e.g. rain detection. What is the problem..
-
Hi,
The issue is, the relay node on the mower might be out of range or asleep at times, however I'd still like it to receive the relay command when it wakes or returns into range... So it can close the relay and tell the mower it's raining.
How can I ensure the command from Domoticz reaches the mower given it might be asleep or out of range for periods of time?
The flow in Domoticz is: If garden node detects rain or soil moisture high, send close command to relay node (mower).
-
@Mark-Swift I think you have two different issues:
- Robot might be out of range
2.the relay node might be asleep
The first issue can easily be fixed be creating a repeater node. Or more of you have a really large garden.
The second can not be fixed. I asked a simular question last week But a sleeping node cannot be awakened by the MySensors network.
My solution would be. To add a rain sensor to your robot, let that signal the robot to quit/move and signal the fact that it's raining. I know it will consume more power. But I think you can awaken the node on an interrupt triggered by the rain sensor. That way you can keep the sensor using the sleep mode.
- Robot might be out of range
-
Well, I would presume that the robot mower base station has some battery charging function for the mower when it returns home to park? If so, there should be some sort of power supply available there.
Why not add a node at the mower base station that is either always on, or checks in more frequently with the controller (or wherever it's getting it's rain information from) in order to tell it to "stay home" somehow.
Also, I would think you would want to base the decision whether to send the mower out or not based on if it's raining right now or not. How long after it starts raining does it take your soil moisture sensor(s) to register? If this happens quickly, then disregard. Otherwise maybe you might want some sort of rain sensor instead.
-
Hi Mark,
Why not have the sensor on the mower wake up periodically (eg every 30 seconds, or once per minute, etc.) and have it ask for an update? If it does not get a response, then leave it in its current state. That should accommodate both issues.
Cheers
Al
-
@Sparkman said:
Hi Mark,
Why not have the sensor on the mower wake up periodically (eg every 30 seconds, or once per minute, etc.) and have it ask for an update? If it does not get a response, then leave it in its current state. That should accommodate both issues.
Cheers
AlThis sounds like an ideal situation, sadly I have absolutely no idea how to perform such an action from the node on the mower, I presume it would need to query Domoticz somehow... Any ideas or examples?
Thanks,
Mark
-
Hi Mark,
The only example I can think of is @BulldogLowell's sprinkler controller. It queries for run-times from the controller. I think that is supported on the Vera, and not sure if Domoticz supports the same feature.
Cheers
Al
-
Hi!
Some examples of getting a value from Domoticz is
@AWI http://forum.mysensors.org/topic/1976/scrolling-text-sensor-node-with-new-v_text and http://forum.mysensors.org/topic/1957/lcd-clock-and-text-sensor-node-with-new-v_text.
My LCD screen uses the same method:
https://www.openhardware.io/view/23/In-wall-LCD-SwitchScene-controller-for-MySensors
-
Hi Guys,
Firstly, thank you very much for the replies and help. I'm really struggling to get my head around it, and have been playing around the last few hours with little results.
From the above is seems logical to have one node in the mower garage, connected to both a rain sensor and soil sensor, this doesn't need to sleep and can update domoticz frequently. I'm using simple on / off switches for both rain and moisture in Domoticz.
I now need to figure out how to have a node wake up and check the status of the rain and moisture switches from Domoticz - after a couple of hours trying various things, I'm at a loss how to achieve this. Perhaps I should consider giving up
-
@Mark-Swift You can let that one node sleep. It will save power, thus energy an money. Since it would only be a sensor and not an actuator. Unless you want to node to do more than just rain and soil detection. If however you want to be able to add more intelligence, let's say the robot should not go out during night times - anti theft - you probably want that node to respond to message from your Home Automation system. As far as I've understood a node cannot be awoken, by a message received from the gateway.
But of course it all depends on the definition of real-time. If it's okay, that you'll only require a response time of half a minute or more, you could let the node query the gateway for new states. But that will complicate your implementation. Hence you see the problem? In cases like this, it's more important to design what you want rather than let the electronics dictate what you can do. That's at least my point of view. Because there are a lot of possibilities.
We can help you with that implementation. But my advice is, think what it is you want to achieve. Just grab a pencil and make a simple drawing. Visualizing problems often lead to to simple and pragmatic solutions.
A node can be awoken by either on an interrupt and/or a timer. Just have a look at the MySensor API description of gw.sleep
-
@TheoL I think I understand that, thanks... I think I'm clear on what I need to do, but the missing piece for me is how to have a node look up a value in Domoticz.
I think the logic is quite simple?
Mower node, wakes up every 30 minutes and checks the status of switches rain & soil moisture within Domoticz (sent by mower garage node). If either switch is 'on', activate relay (bridge rain sensor connections on mower).
-
@Mark-Swift I think the way sending text messages, like sundberg has done, will do exactly what you need.
- Let the node sleep
- If it awakes it needs to query the gateway and domotics for a message
- Handle the response
- Notify the robot if needed.
I believe you need to do some things on the domoticz side. Haven't played with it yet. But @Awi and @sundberg84 have accomplished this already. They might be able to help you with that part as well.
-
This requiers dev branch !
You need to have the node create text sensorMyMessage textMsg(messageCHILD, V_TEXT); // message for Sending Text to Controller
Then you use a script and update this in the controller with json for example.
See the examples.Then you use request to fetch it:
request(messageCHILD, V_TEXT, 0);
and recive to handle the incoming message.
void receive(const MyMessage &message) { if (message.sensor == messageCHILD) { if (message.type == V_TEXT) { // Text content } }
-
This post is deleted!
-
@sundberg84 said:
This requiers dev branch !
You need to have the node create text sensorMyMessage textMsg(messageCHILD, V_TEXT); // message for Sending Text to Controller
Then you use a script and update this in the controller with json for example.
See the examples.Then you use request to fetch it:
request(messageCHILD, V_TEXT, 0);
and recive to handle the incoming message.
void receive(const MyMessage &message) { if (message.sensor == messageCHILD) { if (message.type == V_TEXT) { // Text content } }
Hi @sundberg84,
Thanks for taking time out to reply.
I think I kind of understand, but I'm a new to Arduino's and hence can't quite apply it to my situation. Could you perhaps point me in the right direction with regards the problem I've presented? I know it's a big ask but would be greatly appreciated. This is the final piece of the puzzle I need to solve before deploying my new mower garage...
As stated earlier, I have 2 sensors:
Node 1: Reports Moisture / Rain to Domoticz
Node 2: Relay (Closes contacts of mower rain pins)I need node 2 to wake every 30 minutes and check if node 1 has reported either moisture or rain (they are switches in Domoticz).
-
@Mark-Swift Sorry friend, I dont have time to code and test a sketch at the moment. Work, family and own projects.
I suggest you take it step by step, look at http://www.mysensors.org/build/ and build yourself some temp nodes and learn as you go.
Also look at the provided examples above - the logic is the same in them all... you will see.
Copy paste code and try and see what happens... watch the serial output and you will learn.
-
@Mark-Swift I'm afraid I have the same problem as @sundberg84. I have too many things that need my attention at the moment. I'm developing an Arduino/MySensors course for beginners which was unforeseen - and consumes a lot of time - and I'm following a Big Data course at San Diego University. That with my family and some projects I'm working on is more than enough at the moment.
I'm willing to help except for the part with the text message exchange between Domoticz. I feel bad about that, but it is what it is.
Maybe we can start with a simpler sketch than the one you have in mind. It is the way I always developping things. Start simple and then add more complexity. Just give me a holla if you want me to help you with things.
-
@sundberg84 @TheoL I understand, no hard feelings, I'm also pretty busy (currently a week away from launching my startup) so I know how it feels
The code for the mower node I've got so far is
// Enable debug prints to serial monitor #define MY_DEBUG // Enable and select radio type attached #define MY_RADIO_NRF24 // #define MY_RADIO_RFM69 // Enable repeater functionality for this node // #define MY_REPEATER_FEATURE #include <SPI.h> #include <MySensor.h> #define CHILD_ID1 1 #define CHILD_ID2 2 #define RELAY_PIN 3 #define RELAY_ON 1 // GPIO value to write to turn on attached relay #define RELAY_OFF 0 // GPIO value to write to turn off attached relay MyMessage MowerMsg(CHILD_ID2, V_TEXT); // message for Sending Text to Controller void before() { // Then set relay pins in output mode pinMode(RELAY_PIN, OUTPUT); // Set relay to last known state (using eeprom storage) digitalWrite(RELAY_PIN, loadState(CHILD_ID1) ? RELAY_ON : RELAY_OFF); // Fetch mower run status } void setup() { } void presentation() { // Send the sketch version information to the gateway and Controller sendSketchInfo("Relay", "1.0"); // Register all sensors to gw (they will be created as child devices) present(CHILD_ID1, S_LIGHT); present(CHILD_ID2, S_CUSTOM); } void loop() { } void receive(const MyMessage &message) { // We only expect one type of message from controller. But we better check anyway. if (message.type == V_LIGHT) { // Change relay state; digitalWrite(message.sensor, message.getBool() ? RELAY_ON : RELAY_OFF); // Store state in eeprom saveState(message.sensor, message.getBool()); // Write some debug info Serial.print("Incoming change for sensor:"); Serial.print(message.sensor); Serial.print(", New status: "); Serial.println(message.getBool()); } }
I've no idea if I'm on the right lines or not, I have however managed to get the V_TEXT to show in Domoticz and update it to '1', it's currently living under utility sensors?
Now, if I can just figure out how to update the utility sensor based on my moisture / rain sensors and retrieve it, once that's done I'm sure I can add the logic for if V_TEXT = 1.
-
It's a bit too late over here, will look at it tomorrow. Your own startup cool!! What is your business?
-
@TheoL Yes, we've been building our product for a year; we're due to launch in a month or so. We're looking to revolutionise the recruitment industry
I hope you can help point me in the right direction regarding this predicament, it's the last thing I need to complete.
Cheers,
Mark
-
@Mark-Swift I'll see what I can do. But as said before. I haven't tested the V_TEXT. And since I'm on an old version of Domoticz, I won't be able to.
-
@Mark-Swift Random one here, you didn't happen to work for a company called ABS in the past did you?
-
@chickey Sadly I did, I remember OSG
-
Small world lol OSG is a nearly distant memory now, disbanded in the UK a few years ago nearly now, remember seeing you'd got the robot mower and when i saw your name i put 2 and 2 together and got the right number for a change lol. Been tinkering with the mysensors stuff and Domoticz lately. Only got a few sensors going so far but working well. Not to go too far off topic which mower did you go for BTW been looking at them myself.
-
I've actually got 2 (don't ask!). I have the Worx Landroid, it's great with exception of the rain sensor...
I've just completed building a garage for it - complete with automatic door, rain and moisture sensors and some exterior neopixel indicators showing it's status. It saves me a ton of time cutting the grass; I'd thoroughly recommend it!
-
@Mark-Swift I was looking at the Worx Landroid as it seemed pretty good value.
-
Well i got myself a Worx Landroid 794E from ebay, just looking for a base station and boundary wire now and i'll be up and running. Did you ever sort your issue to stop it going out in the rain?