Arduinon startup complete request strange behaviour (python)
When the gateway is started up it sends a message 'Arduino startup complete' (at least that is what I see).
But instead of using the 'normal' 5 field format I receive the below with 8 fields.
Obviously this is wrong and it looks like one or two request are mixed up (possibly a request for a radioId together with the startup message)...
Any idea how this can happen (using python and serial connection)...
2014-04-29 01:16:36 MySensors Debug Receiving command 255;255;4;0;0;4;11;Arduino startup complete.
serial(PSTR("0;0;%d;%d;Arduino startup complete.\n"), M_INTERNAL, I_LOG_MESSAGE);
This is the only thing i can find being printed during Gateway begin.
@hek is it in any way possible that messages get scrambled on the gateway when they cross each other?
No, i don't really see how this could happen. Do you have any idea what other message it could have gotten mixed up with?
What happens if you turn of debug-printing does it disappear?
This happened with and without debug printing.
The funny thing is that it appeared 'out of the blue', showed up a couple of restarts and it looks like it disappeared again with the last restart.
I will keep an eye on it since I will need a lot of restarts before I am ready with the plugin ")
OK, this time it is completely clear to me but I don't know why yet.
Receiving command 1;2;2;2;0;0;4;11;Arduino startup complete.
Two sensor/gateway messages were concatenated.
The first a relay device 'reporting for duty', asking for the registered state of itself 1;2;2;2;
And following the gateway reporting for duty: 0;0;4;11;Adruino startup complete
Strange though that the gateway presentation comes after the sensor presentation...
Are you really "breaking" the commands on newline character on the phyton side? Please post your code
See below, the answer is yes. I do a readline() and it breaks on '\n' by default and MySensors does the same.
BTW I added the flush() after sending my previous post as well as removing all sleeping code from the sensor.
I will start playing with this because I suspect one of these two (or both) solved the issue.
I now see Receiving command 0;0;4;11;Arduino startup complete. before anything else
EDIT: false alarm. A new upload of the sketch and a restart made the issue appear again
try: request = self.connection.readline() except: self.debugLog("Unexpected error:", sys.exc_info()) request = None finally: self.connection.flush() if request: request = request.strip("\n\r") self.debugLog("Receiving command %s" % request)
Should you really flush after calling readline()?
Nope, this was a 'if it does not help it will not hurt'.
I am going to remove it.
Hard to say,
It surely looks like readline() gives back more that one line to me.
I'm no phyton expert. But where is request-variable declared? Is it cleared between runs?
Yes, all variables are cleared before I re-use them which is completely obsolete even because they are defined in the method and the method is called from within a/the loop.
I will ask the Indigo gurus about this...