Strange value being sent from controller using mixed temp/relay node
-
Interesting findings, if you find any solution for this in the MQTT gateway I would really appreciate if you post it. I'm about to start implementing relays as well.
(it's actually not my version, I think @ntruchsess is the one who created it) ;)
-
@gadu if you have a setup running, could you publish a message on your mosquitto server just like this?
MyMQTT/25/1/V_LIGHT 1 MyMQTT/25/1/V_LIGHT 0I don't think it matters if you have any relays connected or defined, it's just to see what value it tries to send to the node... (assuming you have your gateway connected to a pc to be able to see the serial output)?
No problems if this is not possible.
-
I cannot see where the issue is coming from, the mqttgateway seems very straightforward, i think the answer might be in the libraries or some kind of conflict with the datatypes? it's a little over my head, but i would really love to get this working. :/
-
// NOTE above : Beware to check if there is any length on payload in your incommingMessage code:
// Example: if (msg.type==V_LIGHT && strlen(msg.getString())>0) otherwise the code might do strange things.I have a question regarding this line in MyMQTTClient.h that perhaps @hek or @ntruchsess might be able to comment on, Is the above issue that i am seeing linked to this warning? it is beyond my weak coding to grasp the implications... Or anyone who may have a comment, i would really love to get this to work!!!
-
Ok, well i guess you were listed on the sketch from before it was branched, but thanks for replying.
As an update to my struggles ;) i have found a workaround which might hint at a solution..
If i publish :
MyMQTT/25/5/V_LIGHT 0.0r MyMQTT/25/5/V_LIGHT 1.0rinstead of
MyMQTT/25/5/V_LIGHT 0 MyMQTT/25/5/V_LIGHT 1Then it seems that it overwrites the scraps of the previous temp readings that are causing trouble, and activates the relay everytime.
also.. interestingly if i publish 0.00r to my mqtt, then the gateway reads all the following temps with a trailing 0 eg 21.90 instead of 21.9 / or '1.9rr' instead of '1.9r' so it seems like it is storing a value somewhere and only overwriting the parts that are conflicting with the next received value.
-
@gadu if you have a setup running, could you publish a message on your mosquitto server just like this?
MyMQTT/25/1/V_LIGHT 1 MyMQTT/25/1/V_LIGHT 0I don't think it matters if you have any relays connected or defined, it's just to see what value it tries to send to the node... (assuming you have your gateway connected to a pc to be able to see the serial output)?
No problems if this is not possible.
@Gambituk said:
@gadu if you have a setup running, could you publish a message on your mosquitto server just like this?
MyMQTT/25/1/V_LIGHT 1 MyMQTT/25/1/V_LIGHT 0I don't think it matters if you have any relays connected or defined, it's just to see what value it tries to send to the node... (assuming you have your gateway connected to a pc to be able to see the serial output)?
No problems if this is not possible.
Actually yes, I have a relay sketch that BulldogLowell helped me with in this thread:
http://forum.mysensors.org/topic/901/relaywithbuttonactuator-another-n00b-question/7The idea behind the sketch is written in the thread, but the short story is that I needed two relays and when the button is pressed one goes on for a sec (then off) and the other goes on until i push the button again. So it's actually only controlling one relay, nothing else.
By publishing...pi@raspberrypi ~ $ mosquitto_pub -r -t MyMQTT/23/1/V_LIGHT -m "1" pi@raspberrypi ~ $ mosquitto_pub -r -t MyMQTT/23/1/V_LIGHT -m "0"I can see the following...
pi@raspberrypi ~ $ mosquitto_sub -v -t MyMQTT/# MyMQTT/23/1/V_LIGHT 1 MyMQTT/23/1/V_LIGHT 0 -
ah, sorry, @gadu i dont think i explained clearly... what i wanted to see was what happens in the serial monitor on the gateway when those values are published (what gets sent over nrf to the node). thanks for trying that, i understand if you cant get serial monitor output. but if it was possible, i would really appreciate it
-
Here goes...
This is the ProMini output from the monitor when I turn on and off the relay...
send: 23-23-0-0 s=1,c=1,t=2,pt=2,l=2,st=ok:1 read: 0-0-23 s=1,c=1,t=2,pt=2,l=2:1 This is an ack from gateway Incoming change for sensor:1, New status: 1 read: 0-0-23 s=1,c=1,t=2,pt=0,l=4:1.6r Incoming change for sensor:1, New status: 1 send: 23-23-0-0 s=1,c=1,t=2,pt=2,l=2,st=ok:0 read: 0-0-23 s=1,c=1,t=2,pt=2,l=2:0 This is an ack from gateway Incoming change for sensor:1, New status: 0 read: 0-0-23 s=1,c=1,t=2,pt=0,l=4:0.6r Incoming change for sensor:1, New status: 0This what I see on the gateway when I turn on and off the relay....
publish: MyMQTT/23/1/V_LIGHT 1 0;0;3;0;9;send: 0-0-23-23 s=1,c=1,t=2,pt=0,l=4,st=ok:1sor 0;0;3;0;9;read: 23-23-0 s=1,c=1,t=2,pt=2,l=2:0 0;0;3;0;9;send: 0-0-23-23 s=1,c=1,t=2,pt=2,l=2,st=ok:0 publish: MyMQTT/23/1/V_LIGHT 0 0;0;3;0;9;send: 0-0-23-23 s=1,c=1,t=2,pt=0,l=4,st=ok:0sor 0;0;3;0;9;read: 23-23-0 s=1,c=1,t=2,pt=2,l=2:1 0;0;3;0;9;send: 0-0-23-23 s=1,c=1,t=2,pt=2,l=2,st=ok:1I hope it helps.
-
That's perfect, that shows clearly that the problem is coming from the gateway sketch. I assume that the r on the end of both your and my output's is a termination character, and everything between the (1/0) and the 'r' in the gateway serial output is 'debris' left over from a previous output.. (for me a previous temp reading, for you something ending in 'so' .
With my workaround from yesterday:- (publishing something like this from openhab or wherever mysensor:MyMQTT/25/4/V_LIGHT:command:ON:1.0r <-1.0r instead of just 1) , my relay reacts really fast and accurately when triggered and continues to work. Before it was very slow and not reliable.
I am not sure if i will find the cause and be able to correct it but at least there is a workaround.
Thanks for your time @gadu
-
Hi! I'm starting to play with relay and I experiencing somethings similar. I have 3 sensors (two of them works great, just temperature, volt, light and humidity) one is relay sensor. First of all it just doesn't react to my commands:
mosquitto_pub -p 1883 -h 10.0.0.11 -t MyMQTT/22/1/V_LIGHT -m "1"serial shows just this:
connecting at 115200 repeater started, id 22 send: 22-22-0-0 s=255,c=0,t=18,pt=0,l=3,st=ok:1.4 send: 22-22-0-0 s=255,c=3,t=6,pt=1,l=1,st=fail:0 send: 22-22-0-0 s=255,c=3,t=11,pt=0,l=12,st=ok:Relay sketch send: 22-22-0-0 s=255,c=3,t=12,pt=0,l=3,st=ok:1.0 send: 22-22-0-0 s=1,c=0,t=3,pt=0,l=3,st=ok:1.4I'm using stock http://www.mysensors.org/build/relay code, just setting node_id manually to 22.
On the controller I have:
0;0;3;0;9;read: 21-21-0 s=11,c=1,t=0,pt=7,l=5:23.0 publish: MyMQTT/21/11/V_TEMP 23.0 0;0;3;0;9;send: 0-0-21-21 s=11,c=1,t=0,pt=0,l=7,st=fail:23.0001 0;0;3;0;9;send: 0-0-22-22 s=1,c=1,t=2,pt=0,l=7,st=fail:13.0001It looks like it tries to send '1' with garbage from last sensor read.
It does this with my humidity sensor:
publish: MyMQTT/21/12/V_VOLTAGE 5001 0;0;3;0;9;send: 0-0-21-21 s=12,c=1,t=38,pt=0,l=4,st=ok:5001 0;0;3;0;9;read: 21-21-0 s=10,c=1,t=1,pt=7,l=5:52.0 publish: MyMQTT/21/10/V_HUM 52.0 0;0;3;0;9;send: 0-0-21-21 s=10,c=1,t=1,pt=0,l=8,st=fail:52.05001I am also using MQTT client gateway which @gadu recommended me.
I did not understood how does this workaround @Gambituk mention work. Do you know what is going on above? What am I doing wrong?
P.S. Using standart EthernetGateway code also scrambles messages (please note strange sing after '1'):
0;0;3;0;9;read: 22-22-0 s=255,c=3,t=11,pt=0,l=12:Relay sketch 0;0;3;0;9;read: 22-22-0 s=255,c=3,t=12,pt=0,l=3:1.0 0;0;3;0;9;read: 22-22-0 s=1,c=0,t=3,pt=0,l=3:1.4 0;0;3;0;9;send: 0-0-22-22 s=1,c=1,t=2,pt=0,l=2,st=ok:1à 0;0;3;0;9;read: 0-1-22 s=1,c=1,t=2,pt=0,l=2:1à 0;0;3;0;9;read: 21-21-0 s=12,c=1,t=38,pt=4,l=4:5023 MyMQTT/21/12/V_VOLTAGE 0;0;3;0;9;send: 0-0-22-22 s=1,c=1,t=2,pt=0,l=2,st=fail:1àafter this relay node does not accept any message (you can see st=fail on the last line - that was me retrying mosquitto_pub -p 1883 -h 10.0.0.34 -t MyMQTT/22/1/V_LIGHT -m "1").
-
What i think happens.. in my own way of thinking!
1 2 3 4 5 6 7 8 B a d v a l u e something longer than expected 1 1 . 4 v a l u e next value is 11.4 but longer value stays in a register somewhere 2 1 . 6 5 7 l u e and is mixed with the next value - 1 2 . 5 5 7 l u e until restart or overwrite -So i think there is something that needs to be changed to control the length of expected values or actual values to adapt to whatever data arrives.
For my workaround, send 1.0 and 0.0 instead of 1 and 0 seems to force the sketch to round the value to 1 or 0 even when there is "1.0dvalue" as the received instruction.
-
http://forum.mysensors.org/topic/524/mqtt-client-gateway/29 There is a proposed solution in the following post, i will test and see if it helps, and report back.