MQTT Broker gateway
-
I can confirm it's working with UIPEthernet.h and the ENC28J60 module as well. You need to turn off debugging in MyConfig.h to make the code fit.
@ToSa said:
I can confirm it's working with UIPEthernet.h and the ENC28J60 module as well. You need to turn off debugging in MyConfig.h to make the code fit.
Maybe that was a little too fast - it starts up and starting OpenHAB finds the gateway and connects. When I reset a node it appears that the gateway crashes (OpenHAB reports disconnect) and only a reset of the gateway helps to get it to work again. Problem is it's hard to debug without debugging enabled due to code size :(
-
@ToSa said:
I can confirm it's working with UIPEthernet.h and the ENC28J60 module as well. You need to turn off debugging in MyConfig.h to make the code fit.
Maybe that was a little too fast - it starts up and starting OpenHAB finds the gateway and connects. When I reset a node it appears that the gateway crashes (OpenHAB reports disconnect) and only a reset of the gateway helps to get it to work again. Problem is it's hard to debug without debugging enabled due to code size :(
-
@ToSa if possible you could make a tcpdump over the mqqt port and I'll look at it. Also a serial dump from the node would be great
@Damme said:
@ToSa if possible you could make a tcpdump over the mqqt port and I'll look at it. Also a serial dump from the node would be great
After changing the include from Ethernet.h to UIPEthernet.h the sketch fits into the m328 only with DEBUG (and TCPDUMP) turned off:
DEBUG / TCPDUMP turned off:
Sketch uses 30,626 bytes (99%) of program storage space. Maximum is 30,720 bytes.
Global variables use 1,330 bytes (64%) of dynamic memory, leaving 718 bytes for local variables. Maximum is 2,048 bytes.DEBUG / TCPDUMP turned on:
Sketch uses 32,354 bytes (105%) of program storage space. Maximum is 30,720 bytes.
Global variables use 1,393 bytes (68%) of dynamic memory, leaving 655 bytes for local variables. Maximum is 2,048 bytes.
processing.app.debug.RunnerException: Sketch too big;The only thing I have right now to look at is the OpenHAB output (appears that it's not happening when I reset a node but rather random):
pi@openhab ~/runtime $ ./start.sh
Launching the openHAB runtime...
osgi> 19:54:19.384 INFO o.o.c.internal.CoreActivator[:61] - openHAB runtime has been started (v1.6.0).
19:54:39.316 INFO o.o.i.t.mqtt.MqttService[:106] - MQTT Service initialization completed.
19:54:39.322 INFO o.o.i.t.m.i.MqttBrokerConnection[:112] - Starting MQTT broker connection 'mysensor'
19:54:42.838 INFO o.o.m.c.i.ModelRepositoryImpl[:79] - Loading model 'logging.persist'
19:54:46.082 INFO o.o.m.c.i.ModelRepositoryImpl[:79] - Loading model 'exec.persist'
19:54:46.261 INFO o.o.m.c.i.ModelRepositoryImpl[:79] - Loading model 'rrd4j.persist'
19:54:46.494 INFO o.o.m.c.i.ModelRepositoryImpl[:79] - Loading model 'db4o.persist'
19:54:47.009 INFO o.o.m.c.i.ModelRepositoryImpl[:79] - Loading model 'test.items'
19:55:01.187 INFO o.o.i.s.i.DiscoveryServiceImpl[:72] - mDNS service has been started
19:55:10.219 INFO o.o.m.c.i.ModelRepositoryImpl[:79] - Loading model 'test.sitemap'
19:55:19.042 INFO o.o.io.rest.RESTApplication[:143] - Started REST API at /rest
19:55:24.936 INFO o.o.u.w.i.s.WebAppServlet[:79] - Started Classic UI at /openhab.app
19:55:35.271 ERROR o.o.i.t.m.i.MqttBrokerConnection[:478] - Error starting consumer
org.eclipse.paho.client.mqttv3.MqttException: Connection lost
at org.eclipse.paho.client.mqttv3.internal.CommsReceiver.run(CommsReceiver.java:138)
Caused by: java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:196)
19:55:35.298 ERROR o.o.i.t.m.i.MqttBrokerConnection[:532] - MQTT connection to broker was lost
org.eclipse.paho.client.mqttv3.MqttException: Connection lost
at org.eclipse.paho.client.mqttv3.internal.CommsReceiver.run(CommsReceiver.java:138)
Caused by: java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:196)
19:55:35.305 ERROR o.o.i.t.m.i.MqttBrokerConnection[:536] - MQTT connection to 'mysensor' was lost: Connection lost : ReasonCode 32109 : Cause : Connection reset
19:55:35.310 INFO o.o.i.t.m.i.MqttBrokerConnection[:543] - Starting connection helper to periodically try restore connection to broker 'mysensor'
19:55:45.317 INFO o.o.i.t.m.i.MqttBrokerConnection[:112] - Starting MQTT broker connection 'mysensor' -
@Damme said:
@ToSa if possible you could make a tcpdump over the mqqt port and I'll look at it. Also a serial dump from the node would be great
After changing the include from Ethernet.h to UIPEthernet.h the sketch fits into the m328 only with DEBUG (and TCPDUMP) turned off:
DEBUG / TCPDUMP turned off:
Sketch uses 30,626 bytes (99%) of program storage space. Maximum is 30,720 bytes.
Global variables use 1,330 bytes (64%) of dynamic memory, leaving 718 bytes for local variables. Maximum is 2,048 bytes.DEBUG / TCPDUMP turned on:
Sketch uses 32,354 bytes (105%) of program storage space. Maximum is 30,720 bytes.
Global variables use 1,393 bytes (68%) of dynamic memory, leaving 655 bytes for local variables. Maximum is 2,048 bytes.
processing.app.debug.RunnerException: Sketch too big;The only thing I have right now to look at is the OpenHAB output (appears that it's not happening when I reset a node but rather random):
pi@openhab ~/runtime $ ./start.sh
Launching the openHAB runtime...
osgi> 19:54:19.384 INFO o.o.c.internal.CoreActivator[:61] - openHAB runtime has been started (v1.6.0).
19:54:39.316 INFO o.o.i.t.mqtt.MqttService[:106] - MQTT Service initialization completed.
19:54:39.322 INFO o.o.i.t.m.i.MqttBrokerConnection[:112] - Starting MQTT broker connection 'mysensor'
19:54:42.838 INFO o.o.m.c.i.ModelRepositoryImpl[:79] - Loading model 'logging.persist'
19:54:46.082 INFO o.o.m.c.i.ModelRepositoryImpl[:79] - Loading model 'exec.persist'
19:54:46.261 INFO o.o.m.c.i.ModelRepositoryImpl[:79] - Loading model 'rrd4j.persist'
19:54:46.494 INFO o.o.m.c.i.ModelRepositoryImpl[:79] - Loading model 'db4o.persist'
19:54:47.009 INFO o.o.m.c.i.ModelRepositoryImpl[:79] - Loading model 'test.items'
19:55:01.187 INFO o.o.i.s.i.DiscoveryServiceImpl[:72] - mDNS service has been started
19:55:10.219 INFO o.o.m.c.i.ModelRepositoryImpl[:79] - Loading model 'test.sitemap'
19:55:19.042 INFO o.o.io.rest.RESTApplication[:143] - Started REST API at /rest
19:55:24.936 INFO o.o.u.w.i.s.WebAppServlet[:79] - Started Classic UI at /openhab.app
19:55:35.271 ERROR o.o.i.t.m.i.MqttBrokerConnection[:478] - Error starting consumer
org.eclipse.paho.client.mqttv3.MqttException: Connection lost
at org.eclipse.paho.client.mqttv3.internal.CommsReceiver.run(CommsReceiver.java:138)
Caused by: java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:196)
19:55:35.298 ERROR o.o.i.t.m.i.MqttBrokerConnection[:532] - MQTT connection to broker was lost
org.eclipse.paho.client.mqttv3.MqttException: Connection lost
at org.eclipse.paho.client.mqttv3.internal.CommsReceiver.run(CommsReceiver.java:138)
Caused by: java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:196)
19:55:35.305 ERROR o.o.i.t.m.i.MqttBrokerConnection[:536] - MQTT connection to 'mysensor' was lost: Connection lost : ReasonCode 32109 : Cause : Connection reset
19:55:35.310 INFO o.o.i.t.m.i.MqttBrokerConnection[:543] - Starting connection helper to periodically try restore connection to broker 'mysensor'
19:55:45.317 INFO o.o.i.t.m.i.MqttBrokerConnection[:112] - Starting MQTT broker connection 'mysensor'@ToSa wireshark dump https://www.wireshark.org/ or tcpdump http://www.tcpdump.org/
-
@ToSa wireshark dump https://www.wireshark.org/ or tcpdump http://www.tcpdump.org/
@Damme said:
@ToSa wireshark dump https://www.wireshark.org/ or tcpdump http://www.tcpdump.org/
Thought you were referring to the "#define TCPDUMP" in MyMQTT.h :)
I did "sudo tcpdump host 10.0.1.99 -i eth0 -w dump.pcap" on the RPi that is running the OpenHAB runtime (10.0.1.6 is the IP of the RPi with OpenHAB / 10.0.1.99 is the IP of the MQTT gateway) and then did the following:
- power-on MQTT gateway
- start OpenHAB and wait until startup finished
- power-on node with DallasTemperature
The pcap file is attached (not knowing a lot about the protocol it looks like a series of keep-alive messages only and suddenly a connection reset): dump2.pcap
I do not see any messages arriving at OpenHAB... looking at the debug output from the node it appears that the "find parent" message is correctly handled by the gateway but the "node ID request" is not.
** OpenHAB output: **
pi@openhab ~/runtime $ ./start.sh
Launching the openHAB runtime...
osgi> 21:55:31.305 INFO o.o.c.internal.CoreActivator[:61] - openHAB runtime has been started (v1.6.0).
21:55:50.955 INFO o.o.i.t.mqtt.MqttService[:106] - MQTT Service initialization completed.
21:55:50.974 INFO o.o.i.t.m.i.MqttBrokerConnection[:112] - Starting MQTT broker connection 'mysensor'
21:55:57.178 INFO o.o.m.c.i.ModelRepositoryImpl[:79] - Loading model 'logging.persist'
21:55:59.989 INFO o.o.m.c.i.ModelRepositoryImpl[:79] - Loading model 'exec.persist'
21:56:00.137 INFO o.o.m.c.i.ModelRepositoryImpl[:79] - Loading model 'rrd4j.persist'
21:56:00.303 INFO o.o.m.c.i.ModelRepositoryImpl[:79] - Loading model 'db4o.persist'
21:56:01.162 INFO o.o.m.c.i.ModelRepositoryImpl[:79] - Loading model 'test.items'
21:56:13.732 INFO o.o.m.c.i.ModelRepositoryImpl[:79] - Loading model 'test.sitemap'
21:56:16.231 INFO o.o.i.s.i.DiscoveryServiceImpl[:72] - mDNS service has been started
21:56:31.603 INFO o.o.io.rest.RESTApplication[:143] - Started REST API at /rest
21:56:37.387 INFO o.o.u.w.i.s.WebAppServlet[:79] - Started Classic UI at /openhab.app
21:59:50.613 ERROR o.o.i.t.m.i.MqttBrokerConnection[:532] - MQTT connection to broker was lost
org.eclipse.paho.client.mqttv3.MqttException: Connection lost
at org.eclipse.paho.client.mqttv3.internal.CommsReceiver.run(CommsReceiver.java:138)
Caused by: java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:196)
21:59:50.621 ERROR o.o.i.t.m.i.MqttBrokerConnection[:536] - MQTT connection to 'mysensor' was lost: Connection lost : ReasonCode 32109 : Cause : Connection reset
21:59:50.625 INFO o.o.i.t.m.i.MqttBrokerConnection[:543] - Starting connection helper to periodically try restore connection to broker 'mysensor'
22:00:00.633 INFO o.o.i.t.m.i.MqttBrokerConnection[:112] - Starting MQTT broker connection 'mysensor'** The serial debug output of the node shows (more than that but always repeating as I did several resets of the node): **
sensor started, id 255
req node id
send: 255-255-0-0 s=255,c=3,t=3,pt=0,l=0,st=fail:
req node id
send: 255-255-0-0 s=255,c=3,t=3,pt=0,l=0,st=fail:
req node id
send: 255-255-0-0 s=255,c=3,t=3,pt=0,l=0,st=fail:
req node id
send: 255-255-0-0 s=255,c=3,t=3,pt=0,l=0,st=fail:
req node id
send: 255-255-0-0 s=255,c=3,t=3,pt=0,l=0,st=fail:
req node id
send: 255-255-0-0 s=255,c=3,t=3,pt=0,l=0,st=fail:
send: 255-255-255-255 s=255,c=3,t=7,pt=0,l=0,st=fail:
req node id
send: 255-255-0-0 s=255,c=3,t=3,pt=0,l=0,st=fail:
req node id
send: 255-255-0-0 s=255,c=3,t=3,pt=0,l=0,st=fail: -
@Damme said:
@ToSa wireshark dump https://www.wireshark.org/ or tcpdump http://www.tcpdump.org/
Thought you were referring to the "#define TCPDUMP" in MyMQTT.h :)
I did "sudo tcpdump host 10.0.1.99 -i eth0 -w dump.pcap" on the RPi that is running the OpenHAB runtime (10.0.1.6 is the IP of the RPi with OpenHAB / 10.0.1.99 is the IP of the MQTT gateway) and then did the following:
- power-on MQTT gateway
- start OpenHAB and wait until startup finished
- power-on node with DallasTemperature
The pcap file is attached (not knowing a lot about the protocol it looks like a series of keep-alive messages only and suddenly a connection reset): dump2.pcap
I do not see any messages arriving at OpenHAB... looking at the debug output from the node it appears that the "find parent" message is correctly handled by the gateway but the "node ID request" is not.
** OpenHAB output: **
pi@openhab ~/runtime $ ./start.sh
Launching the openHAB runtime...
osgi> 21:55:31.305 INFO o.o.c.internal.CoreActivator[:61] - openHAB runtime has been started (v1.6.0).
21:55:50.955 INFO o.o.i.t.mqtt.MqttService[:106] - MQTT Service initialization completed.
21:55:50.974 INFO o.o.i.t.m.i.MqttBrokerConnection[:112] - Starting MQTT broker connection 'mysensor'
21:55:57.178 INFO o.o.m.c.i.ModelRepositoryImpl[:79] - Loading model 'logging.persist'
21:55:59.989 INFO o.o.m.c.i.ModelRepositoryImpl[:79] - Loading model 'exec.persist'
21:56:00.137 INFO o.o.m.c.i.ModelRepositoryImpl[:79] - Loading model 'rrd4j.persist'
21:56:00.303 INFO o.o.m.c.i.ModelRepositoryImpl[:79] - Loading model 'db4o.persist'
21:56:01.162 INFO o.o.m.c.i.ModelRepositoryImpl[:79] - Loading model 'test.items'
21:56:13.732 INFO o.o.m.c.i.ModelRepositoryImpl[:79] - Loading model 'test.sitemap'
21:56:16.231 INFO o.o.i.s.i.DiscoveryServiceImpl[:72] - mDNS service has been started
21:56:31.603 INFO o.o.io.rest.RESTApplication[:143] - Started REST API at /rest
21:56:37.387 INFO o.o.u.w.i.s.WebAppServlet[:79] - Started Classic UI at /openhab.app
21:59:50.613 ERROR o.o.i.t.m.i.MqttBrokerConnection[:532] - MQTT connection to broker was lost
org.eclipse.paho.client.mqttv3.MqttException: Connection lost
at org.eclipse.paho.client.mqttv3.internal.CommsReceiver.run(CommsReceiver.java:138)
Caused by: java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:196)
21:59:50.621 ERROR o.o.i.t.m.i.MqttBrokerConnection[:536] - MQTT connection to 'mysensor' was lost: Connection lost : ReasonCode 32109 : Cause : Connection reset
21:59:50.625 INFO o.o.i.t.m.i.MqttBrokerConnection[:543] - Starting connection helper to periodically try restore connection to broker 'mysensor'
22:00:00.633 INFO o.o.i.t.m.i.MqttBrokerConnection[:112] - Starting MQTT broker connection 'mysensor'** The serial debug output of the node shows (more than that but always repeating as I did several resets of the node): **
sensor started, id 255
req node id
send: 255-255-0-0 s=255,c=3,t=3,pt=0,l=0,st=fail:
req node id
send: 255-255-0-0 s=255,c=3,t=3,pt=0,l=0,st=fail:
req node id
send: 255-255-0-0 s=255,c=3,t=3,pt=0,l=0,st=fail:
req node id
send: 255-255-0-0 s=255,c=3,t=3,pt=0,l=0,st=fail:
req node id
send: 255-255-0-0 s=255,c=3,t=3,pt=0,l=0,st=fail:
req node id
send: 255-255-0-0 s=255,c=3,t=3,pt=0,l=0,st=fail:
send: 255-255-255-255 s=255,c=3,t=7,pt=0,l=0,st=fail:
req node id
send: 255-255-0-0 s=255,c=3,t=3,pt=0,l=0,st=fail:
req node id
send: 255-255-0-0 s=255,c=3,t=3,pt=0,l=0,st=fail:@ToSa Thats odd. Everything looks good...(almost, there are some excess of trailing 0x00 but shouldn't matter, but I'll look at that anyways..)
Can you compile with myconfig debug enabled, but define tcpdump disabled? or is it too big that way too? -
I'm currently busy implementing an mqtt client plugin, and i'm going to use mysensors for it's first predefined implementation so i have a couple of questions
I took a look at the api page and saw this in the mqtt documentation:
[MQTT_BROKER_PREFIX]/[NodeID]/[SensorID]/V_[SensorType]Does this means as example:
MyMQTT/[0-255]/[0-255]/[STRING]/[VALUE]OR this?
MyMQTT/[0-255]/[0-255]/[0-endvarindex]/[VALUE]- Are variable types defined by their index used or by name?
- Also it states it keeps track of node id's how are these reported by the broker, should the controller still hand out free id's?
[EDIT]
I currently do not have the hardware present to at least set it up to test and look at what exactly is happening.
[/EDIT] -
I'm currently busy implementing an mqtt client plugin, and i'm going to use mysensors for it's first predefined implementation so i have a couple of questions
I took a look at the api page and saw this in the mqtt documentation:
[MQTT_BROKER_PREFIX]/[NodeID]/[SensorID]/V_[SensorType]Does this means as example:
MyMQTT/[0-255]/[0-255]/[STRING]/[VALUE]OR this?
MyMQTT/[0-255]/[0-255]/[0-endvarindex]/[VALUE]- Are variable types defined by their index used or by name?
- Also it states it keeps track of node id's how are these reported by the broker, should the controller still hand out free id's?
[EDIT]
I currently do not have the hardware present to at least set it up to test and look at what exactly is happening.
[/EDIT]@John MyMQTT/[0-255]/[0-255]/[STRING]/[VALUE]
MQTT.cpp :
sprintf(&buffer[buffsize],"/%i/%i/V_%s", msg.sender, msg.sensor, getType(convBuf, &vType[msg.type]));note V_%s -> MyMQTT/[0-255]/[0-255]/V_[STRING]/[VALUE]
also note there is no trailing / before payload, as http://public.dhe.ibm.com/software/dw/webservices/ws-mqtt/mqtt-v3r1.html
http://mqtt.org/wiki/doku.php/topic_format
I choose not to have trailing slash, but if needed its easy to make it configurable.and get type translates from this list
char V_0[] PROGMEM = "TEMP"; //V_TEMP char V_1[] PROGMEM = "HUM"; //V_HUM char V_2[] PROGMEM = "LIGHT"; //V_LIGHT char V_3[] PROGMEM = "DIMMER"; //V_DIMMER char V_4[] PROGMEM = "PRESSURE"; //V_PRESSURE char V_5[] PROGMEM = "FORECAST"; //V_FORECAST char V_6[] PROGMEM = "RAIN"; //V_RAIN char V_7[] PROGMEM = "RAINRATE"; //V_RAINRATE char V_8[] PROGMEM = "WIND"; //V_WIND char V_9[] PROGMEM = "GUST"; //V_GUST char V_10[] PROGMEM = "DIRECTON"; //V_DIRECTON char V_11[] PROGMEM = "UV"; //V_UV char V_12[] PROGMEM = "WEIGHT"; //V_WEIGHT char V_13[] PROGMEM = "DISTANCE"; //V_DISTANCE char V_14[] PROGMEM = "IMPEDANCE"; //V_IMPEDANCE char V_15[] PROGMEM = "ARMED"; //V_ARMED char V_16[] PROGMEM = "TRIPPED"; //V_TRIPPED char V_17[] PROGMEM = "WATT"; //V_WATT char V_18[] PROGMEM = "KWH"; //V_KWH char V_19[] PROGMEM = "SCENE_ON"; //V_SCENE_ON char V_20[] PROGMEM = "SCENE_OFF"; //V_SCENE_OFF char V_21[] PROGMEM = "HEATER"; //V_HEATER char V_22[] PROGMEM = "HEATER_SW"; //V_HEATER_SW char V_23[] PROGMEM = "LIGHT_LEVEL"; //V_LIGHT_LEVEL char V_24[] PROGMEM = "VAR1"; //V_VAR1 char V_25[] PROGMEM = "VAR2"; //V_VAR2 char V_26[] PROGMEM = "VAR3"; //V_VAR3 char V_27[] PROGMEM = "VAR4"; //V_VAR4 char V_28[] PROGMEM = "VAR5"; //V_VAR5 char V_29[] PROGMEM = "UP"; //V_UP char V_30[] PROGMEM = "DOWN"; //V_DOWN char V_31[] PROGMEM = "STOP"; //V_STOP char V_32[] PROGMEM = "IR_SEND"; //V_IR_SEND char V_33[] PROGMEM = "IR_RECEIVE"; //V_IR_RECEIVE char V_34[] PROGMEM = "FLOW"; //V_FLOW char V_35[] PROGMEM = "VOLUME"; //V_VOLUME char V_36[] PROGMEM = "LOCK_STATUS"; //V_LOCK_STATUS char V_37[] PROGMEM = "DUST_LEVEL"; //V_DUST_LEVEL char V_38[] PROGMEM = "VOLTAGE"; //V_VOLTAGE char V_39[] PROGMEM = "CURRENT"; //V_CURRENT char V_40[] PROGMEM = ""; // char V_41[] PROGMEM = ""; // char V_42[] PROGMEM = ""; // char V_43[] PROGMEM = ""; // char V_44[] PROGMEM = ""; // char V_45[] PROGMEM = ""; // char V_46[] PROGMEM = ""; // char V_47[] PROGMEM = ""; // char V_48[] PROGMEM = ""; // char V_49[] PROGMEM = ""; // char V_50[] PROGMEM = ""; // char V_51[] PROGMEM = ""; // char V_52[] PROGMEM = ""; // char V_53[] PROGMEM = ""; // char V_54[] PROGMEM = ""; // char V_55[] PROGMEM = ""; // char V_56[] PROGMEM = ""; // char V_57[] PROGMEM = ""; // char V_58[] PROGMEM = ""; // char V_59[] PROGMEM = ""; // char V_60[] PROGMEM = "Started!\n"; //Custom for MQTTGateway char V_61[] PROGMEM = "SKETCH_NAME"; //Custom for MQTTGateway char V_62[] PROGMEM = "SKETCH_VERSION"; //Custom for MQTTGateway char V_63[] PROGMEM = "UNKNOWN"; //Custom for MQTTGateway char V_64[] PROGMEM = "FW_CREQ"; //Custom for MQTTGateway char V_65[] PROGMEM = "FW_CRES"; //Custom for MQTTGateway char V_66[] PROGMEM = "FW_REQ"; //Custom for MQTTGateway char V_67[] PROGMEM = "FW_RES"; //Custom for MQTTGatewayThe MQTTgateway hands out ID's; configured in MQTT.h:
#define MQTT_FIRST_SENSORID 20 // If you want manually configured nodes below this value. 255 = Disable #define MQTT_LAST_SENSORID 254 // 254 is max! 255 reserved. #define MQTT_BROKER_PREFIX "MyMQTT" // First prefix in MQTT tree, keep short! #define MQTT_SEND_SUBSCRIPTION 1 // Send empty payload (request) to node upon MQTT client subscribe request. // 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. -
@Damme
Clear!And how about the internal messages? Are these somewhat compatible with the Serial API? Like this one now has a "I_GATEWAY_READY" internal var, this one complies then with the "Started!\n" message?
Also about the presentation (if the node does it), are these also passed through?
I know it's a bit question banging... But i just want to do it right.
-
@Damme
Clear!And how about the internal messages? Are these somewhat compatible with the Serial API? Like this one now has a "I_GATEWAY_READY" internal var, this one complies then with the "Started!\n" message?
Also about the presentation (if the node does it), are these also passed through?
I know it's a bit question banging... But i just want to do it right.
@John No worries! :)
Presentation is On Todo.. Or Rather To think About list is presentation . I dont do anything with that as it is (Just ignores it). I havn't had any good idea for that yet.Internal is nothing more or less, it connects and set a variable that it is connected. :) But sure, there could be transport for internal messages also.
I do have an experimental version there I can send internal messages to reboot node, reboot gateway and set clear read eeprom values. (over mqtt-protocol) but this s not finnished yet.. Ideas are welcome! -
@John No worries! :)
Presentation is On Todo.. Or Rather To think About list is presentation . I dont do anything with that as it is (Just ignores it). I havn't had any good idea for that yet.Internal is nothing more or less, it connects and set a variable that it is connected. :) But sure, there could be transport for internal messages also.
I do have an experimental version there I can send internal messages to reboot node, reboot gateway and set clear read eeprom values. (over mqtt-protocol) but this s not finnished yet.. Ideas are welcome!@John About Presentation ; My idea was that next version of the variable system I will either store some bytes in the MQTT gateway about what S_types to V_types, or hopefully the next protocol contains both those so the GW doesnt have to remember. And then add an extra directory to the MQTT path ( MyMQTT/[0-255]/[0-255]/S_[STRING]/V_[STRING]/[VALUE]
-
I think maybe it depends on the next protocol implementation. Personally i wouldn't mind if the full path mapping was /[0-255]/[0-255]/etc.. to keep (prog)mem print smaller (use the V_ and S_ array index values). It could leave space for more specific things or some extra gateway specific functions.
it would be nice if the mqtt gateway output was "cloned" to the serial output. Controllers should/could be able to map the S_ and V_ types internally. I'm not aware of the openhab config if that would allow this, or that such a setup would require a lot of coding at openhab side.
[EDIT]
It would be more difficult to read though if a path would only exist of numbers. But could also introduce easier maintainability in your library because you wouldn't have to keep track on type namings.
[/EDIT]. -
I think maybe it depends on the next protocol implementation. Personally i wouldn't mind if the full path mapping was /[0-255]/[0-255]/etc.. to keep (prog)mem print smaller (use the V_ and S_ array index values). It could leave space for more specific things or some extra gateway specific functions.
it would be nice if the mqtt gateway output was "cloned" to the serial output. Controllers should/could be able to map the S_ and V_ types internally. I'm not aware of the openhab config if that would allow this, or that such a setup would require a lot of coding at openhab side.
[EDIT]
It would be more difficult to read though if a path would only exist of numbers. But could also introduce easier maintainability in your library because you wouldn't have to keep track on type namings.
[/EDIT].@John That was my first aproach, and I might set a define configuration to choose if the MQTT gateway should translate or not. As you say, the footprint would be much smaller.
Might be next version of the MQTT, slectable address layout :) -
@Damme
That would be really cool :)It would be nice though if there was a way to identify node id's with AUTO turned on. Maybe i'm missing something or do you have to know up front with auto enabled which node id is going to be assigned?
I'm just asking this because of identifying new/existing nodes in the network. Is it the V_SKETCH_NAME i can refer to?
And i hope some last questions protocol specific:
- Version compatibility is 3.1?
- All session are clean by default?
-
@Damme
That would be really cool :)It would be nice though if there was a way to identify node id's with AUTO turned on. Maybe i'm missing something or do you have to know up front with auto enabled which node id is going to be assigned?
I'm just asking this because of identifying new/existing nodes in the network. Is it the V_SKETCH_NAME i can refer to?
And i hope some last questions protocol specific:
- Version compatibility is 3.1?
- All session are clean by default?
@John upon node startup it translates gw.sendSketchInfo("Battery Meter", "1.0"); into MyMQTT/20/255/V_SKETCH_NAME and version
so you could have a list as in my first post and it would get filled up with all your sketch names
@John ; Yes and I hope so :) (I might have missed some stuff, I do not take regard of QOS etc)
if its not working,, I'll try to fix it :) -
I can confirm it's working with UIPEthernet.h and the ENC28J60 module as well. You need to turn off debugging in MyConfig.h to make the code fit.
-
As I understand it:

The packet on the left would be from the node, the packet on the right would be to the node. Besides swapping sender and destination, the difference is that in 1.4 the gateway does not have the information to binary encode the value, so it sends the value as a string (payload type 0).
EDIT: added alternate MQTT respresentation of V_code as numeric -
As I understand it:

The packet on the left would be from the node, the packet on the right would be to the node. Besides swapping sender and destination, the difference is that in 1.4 the gateway does not have the information to binary encode the value, so it sends the value as a string (payload type 0).
EDIT: added alternate MQTT respresentation of V_code as numeric -
At first, I thought MQTT would be a great extension to the functionality, in particular because it might systematize the idea of routing messages to more than one destination - eg: to both a HA controller and to a cloud storage service.
So I saw these possible advantages of MQTT:
- Route to multiple destinations, dynamically updated
- Subscription wildcards to filter for desired subsets
- Possibly easier to build plug-ins for some HA controllers
As I look deeper into it, I'm coming to wonder about that.
- There are lighter weight ways to send to more than one destination
- Does subscription wildcarding meet the filtering needs well (below)?
- Is it easier or not?
I'm wondering what subscription wildcards really get used - how valuable is the type of filtering functionality offered by MQTT for our purposes? The meaingful patterns I would imagine are:
- everything
- everything from one node
- everything from one child of one node
- everything of type V_RAIN from one child of one node (ie: one variable)
- everything of type V_RAIN from anywhere
Are any of these (or other options) in use except "everything"? Do you anticipate that they will be?
Just as "route to multiple destinations" could be lighter, filtering could be done differently as well. For example, suppose you wanted to receive all report of inside temperature (7 sensors in your network) or humidity (5 sensors), but not outside temp or humidity and not other v codes. That might take 12 subscriptions - and they would have to be manually set up, or make use of manually entered metadata tables in the controller plug-in (eg: the plug-in might be configured to know which nodes had temp and/or humidity, and which ones were considered "inside", if it was written to handled that).
I could imagine that even if the subscription filtering wasn't highly useful, MQTT might make it easier to create plug-ins for some HA controllers, than using semicolon separated values (serial text format). Is that the case?
I'm very open to hearing other advantages of MQTT, I'm not against it, just trying to understand the benefits vs cost aspect better.