MQTT Client gateway
-
If I change the lines to this:
const char VAR_63[] PROGMEM = "UNKNOWN"; //Custom for MQTTGatewayAnd leave this line alone:
PROGMEM const char *VAR_Type[] = [<removed to keep short>]I get this error:
MyMQTTClient.cpp:82:30: error: variable 'VAR_Type' must be const in order to be put into read-only section by means of 'attribute((progmem))'
PROGMEM const char *VAR_Type[] =I tried const char VAR_Type[] PROGMEM = [ ]; and char const VAR_Type[] PROGMEM = ; but I get the same error. I"m going to do some reading on PROGMEM to see if I can find out what it does.
-
and then changing the getType function to: char * MyMQTTClient::getType(char *b, const char *const *index)
Now onto trying to merge the the SerialGateway and MQTTClientGateway. Need to see if it would be easier to merge the MQTTClientGateway into the new SerialGateway or the other way around. Time to study some code.
-
Thanks Norbert for the great work! Works very well with mosquitto.
I added support for gw.requestTime(...); by modifying MyMQTTClient.cpp after the lines handling I_CONFIG)
else if (msg.type == I_TIME) { txBlink(1); if (!sendRoute( build(msg, GATEWAY_ADDRESS, msg.sender, 255, C_INTERNAL, I_TIME, 0).set(now()))) errBlink(1); }Now I have a timebase for low power (deep standby) sensors.
Next I will try to set the time on the gateway with a MQTT Message or NTP....
-
I just took the time this afternoon and implemented a mqtt-gateway that works as mqtt-client:
it is based on the work of @Damme (http://forum.mysensors.org/topic/260/mysensors-mqtt-gateway) and makes use of nick o'learys PubSubClient-library (http://knolleary.net/arduino-client-for-mqtt/)
The main difference to the existing MyMQTT-gateway is that it will connect to an existing mqtt-broker (e.g. mosquitto). This is beneficial if you want to integrate with other mqtt-client-devices sharing a single broker for your automation solution. It also ensures your mqtt-client that is going to pick up the messages from the gateway will talk to a 'real' broker understanding the whole mqtt protocolls semantics
It works both ways:
on startup or reconnect it subscribes to "MyMQTT/#" (configurable as MQTT_PREFIX). Any publish-messages payload that is delivered by the broker to a topic that complies with the sheme <prefix>/<nodeId>/<childId>/<variable_type> is forwarded as a C_SET-msg to the MySensors radio.
Any C_SET-message received from a node is published to the mqtt-broker using the same sheme.- Norbert
@ntruchsess said:
<prefix>/<nodeId>/<childId>/<variable_type> is forwarded as a C_SET-msg to the MySensors radio.
Hi, I followed the steps, gateway started but not able to use the existing mysensors sketch. I tried with relay and motion sensor but I get nothing in the serial monitor of MQTT client gateway.
Am I missing something here ?
-
@ntruschsess
I am getting this compile error when I compile the MQTT Client gateway on lib1.4.1.
In file included from MQTTClientGateway.ino:63:0:
MyMQTTClient.h:43:35: error: 'RF24_PA_LEVEL_GW' was not declared in this scope
void begin(rf24_pa_dbm_e paLevel=RF24_PA_LEVEL_GW, uint8_t channel=RF24_CHANNEL, rf24_datarate_e dataRate=RF24_DATARATE, uint8_t _rx=6, uint8_t _tx=5, uint8_t _er=4 );
^
MQTTClientGateway.ino: In function 'void setup()':
MQTTClientGateway.ino:136:12: error: 'RF24_PA_LEVEL_GW' was not declared in this scope
Error compiling. -
In MyMQTTClient.cpp the function
MyMQTTClient::processMQTTMessage(char* topic, byte* payload, unsigned int length)
does ignore length. This can lead to garbage transferred to the clients in the payloadchar* ca;
ca = (char *)payload;
ca += length;
*ca = '\0';before
msg.set((const char*)payload); //Payload(I am sure, this can be written in a more elegant way. :))
-
Added support for:
- sketchinfo
- sketchversion
- time
- batterylevel
- dallas RTC and message to set time from outside
-
@FotoFieber @ntruchsess i have a parallel post regarding this version of the controller, i did not know it was the same as this one when i opened the thread :8ball: but i am having some garbage issues, do you think this is the same problem as you have described 2 posts up? http://forum.mysensors.org/topic/921/strange-value-being-sent-from-controller-using-mixed-temp-relay-node thanks for any comments or pointers
-
This seems to be the problem I fixed with adding \0 at the end of the payload. Try the patch from above.
-
Hi guys! Took me a while but I've finally got this compiling and uploading to the Arduino Uno.
I can see the Uno on my ethernet network and it's visible as the IP address I set in the sketch.
But my mosquitto MQTT broker never receives anything from the Uno, I was expecting even just a New Client Connection notification or something... But nothing.... I have OpenHAB talking to Mosquitto and the Mosquitto screen shows it receiving ping requests from OpenHAB so I know the broker side of things is working well.
Anyone got any ideas? I'm confident that the IP address and port for my broker have been properly configured in the sketch.
I just configured 4 things in the scketch..
- Broker IP Address
- Broker Port
- Arduino IP address
- Arduino MAC Address
-
Hi TommySharp
Question 1:
Do you see the connection on mosquitto:mosquitto_sub -h mosquittoip -v -t '$SYS/broker/clients/active'
Question 2:
Do your mysensor-nodes get connected to the gateway? (You can have only one gateway.)Tip 1:
Program your arduino with an isp (or arduinoisp): you then have more room as you don't need the bootloader and can enable debug. -
@FotoFieber
Thanks for the reply....I'm running mosquitto on windows so not sure how to "run" the command you suggest? I can see the mosquitto DOS looking dialogue box onscreen and it shows OpenHAB pinging mosquitto every few minutes, not seeing any pings or subscriptions coming from the MySensors MQTTClient Gateway though?
This is the only gateway I am trying to setup and I have one wireless temperature/humidity sensor running and it's located about 1 meter from the gateway. I expected that even without any sensor nodes setup that at least the Gateway should connect to mosquitto in some way? I did mess about with trying the other MQTT gateway where it is also the broker and I did get a few temperature readings all the way into OpenHAB that way but OpenHAB randomly lost the connection to the broker and then I'd have to reboot everything. Just mentioning that because that tells me that my one sensor node is working properly I guess.
Tip 1 : I'll have to do some googling about an "isp" to see what that's all about....
-
another question: i'm using the uno with the ethernet shield. Is the wiring the same as documented here?
I double checked the wiring but keep on receiving the "check wires" message in the serial monitor.
What did i do?
- wiring the nrf
- enabled DEBUG in myConfig.h
- threw the PubSubClient and DS1307RTC libraries in my lib folder
- "fixed" PubSub code as told by @ntruchsess somewhere in this thread
- configured mqtt server and port, arduino ip an mac (btw, commenting out the arduino IP, which should result in using DHCP, does not work, because local_ip is not configured anymore?)
the code itself compiled fine, but i keep on getting this wiring error :(
what confuses me too: the pins noted in the sketch: are they handled through the ethernetshield?greetings
dakkyEDIT: Dammit .. i forgot to reenable SOFTSPI. Could this cause the wiring problem? and now the Sketch is too large (with debug enabled)
-
You can save program space by uploading it without a bootloader (ISP).
-
Questions (Sorry)
I have rebuild the whole original MQTT sketch so it supports the standard mysensors protocol (the serial/ethernet gateway).
With this, we have all functionality that the original mysensor serial gateway supports.What would be the downside with this implementation ?
The data being transferred is like
http://www.mysensors.org/download/serial_api_14
It is now also very easy to pass the payload an internal serial/ethernet gateway handler, but the payload is not easily interpreted as human text of course.
Would this be something to submit as a replacement of the original MQTT library?
Devs just need to push the payload to their original serial/ethernet handler, and sending messages is also in the same format
-
Remove PROGMEM from line 72 at the file PubSubClient.h
Works for me, but I really don't know why, I remember to read it somewhere.... not sure if it is "safe" to do, but at least I can compile it and test it, and BTW, works fine with my mosquitto instance on my NAS, still have to do more tests.
Regards.
EDIT: The solution is on this thread XD
