resend if st=fail
-
-
Hello everybody,
has anyone built a function that resend the signal, if "st=fail" is detected?
I've already looked at the API and ACK. But have become not really smart of it.This would be great for some devices like relay, alarm, ....
Best Regards,
n3ro -
Hey :)
I have just build this test function to resend a signal if failed.
But i don't know how to execute the ge.send in the string ("// execute code").#include <MySensor.h> #include <SPI.h> #define SENSOR_INFO "Test sensor" #define NODE_ID 200 #define CHILD_ID 1 #define OPEN 1 #define CLOSE 0 MySensor gw; MyMessage msg(CHILD_ID, V_TRIPPED); void setup() { gw.begin(NULL, NODE_ID, false); gw.sendSketchInfo(SENSOR_INFO, "1.0"); gw.present(CHILD_ID, S_DOOR); } void loop() { gwack("gw.send(msg.set(OPEN));"); delay(500); } void gwack(char code[]) { int repeat = 0; boolean sendOK = false; Serial.println(code); // string to execute while ((sendOK == false) or (repeat <= 10)) { if (code) // execute code { Serial.println("OK"); sendOK = true; } else { Serial.println("NOT OK!!"); sendOK = false; } repeat++; } }Any ideas? :)
-
That's not going to work the way you wrote it. That would require the Arduino to be able to compile code, which is asking a bit much of the little micro. :-)
I would either do the retry-on-fail logic directly inline in your loop() function, or put the gw.send() call in gwack() and pass the msg value as a reference/pointer to gwack.
-
That's not going to work the way you wrote it. That would require the Arduino to be able to compile code, which is asking a bit much of the little micro. :-)
I would either do the retry-on-fail logic directly inline in your loop() function, or put the gw.send() call in gwack() and pass the msg value as a reference/pointer to gwack.
@rickmontana83 said:
put the gw.send() call in gwack() and pass the msg value as a reference/pointer to gwack.
What do you mean? :)
Like this?void loop() { //gw.send(msg.set(OPEN)); gwresend("msg.set","OPEN"); delay(500); } void gwresend(char msgcode[],char option[]) { int repeat = 0; boolean sendOK = false; while ((sendOK == false) or (repeat <= 10)) { if (gw.send(msgcode(option)) // execute code { Serial.println("OK"); sendOK = true; } else { Serial.println("NOT OK!!"); sendOK = false; } repeat++; } }(code is not working ;) )
I'm very surprised that there is not already such a function.
-
I'd be surprised if that even compiles. (Does it?)
I meant you should set up the message in loop, then pass the completed message to gwresend like:
msg.set(OPEN);
gwresend(msg);The signature for gwresend will be something like:
void gwresend(MyMessage &msg)
The execute code line would then just be:
if (gw.send(msg)) { ...
Don't take this the wrong way, but this is more of a basic C++ language question. You might want to poke around on StackOverflow for examples to better understand the language (like the pass by reference that I suggested above, which, being from a C background, I've always found a bit scary.)
-
Jeah now its working :)
#include <MySensor.h> #include <SPI.h> #define SENSOR_INFO "Test sensor" #define NODE_ID 200 #define CHILD_ID 1 #define OPEN 1 #define CLOSE 0 MySensor gw; MyMessage msg(CHILD_ID, V_TRIPPED); int repeat = 0; boolean sendOK = false; int repeatdelay = 0; void setup() { gw.begin(NULL, NODE_ID, false); gw.sendSketchInfo(SENSOR_INFO, "1.0"); gw.present(CHILD_ID, S_DOOR); } void loop() { resend((msg.set(OPEN)), 5); delay(500); } void resend(MyMessage &msg, int repeats) { int repeat = 1; int repeatdelay = 0; boolean sendOK = false; while ((sendOK == false) and (repeat < repeats)) { if (gw.send(msg)) { sendOK = true; } else { sendOK = false; Serial.print("FEHLER "); Serial.println(repeat); repeatdelay += 250; } repeat++; delay(repeatdelay); } }```
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login