Hi! I’ve just started using OpenHAB with MQTT bindings. Setup
Debian linux with mosquitto broker and openhab. apt-get installed recently (Sept 2016).
MQTT publishing from arduino boards on the local network Error
MQTT binding don’t read MQTT results from Arduino boards Debugging
On localhost or another local box, I can publish and see OpenHab update. The following works fine (ie. OpenHAB reads and display it):
1474197944: New client connected from ::1 as mosqpub/23840-blacklap2 (c1, k60).
1474197944: Sending CONNACK to mosqpub/23840-blacklap2 (0)
1474197944: Received PUBLISH from mosqpub/23840-blacklap2 (d0, q0, r0, m0, ‘emon/emontx/temp0’, … (2 bytes))
1474197944: Sending PUBLISH to mosq/I0kZJ9M9cVq:sxNY35 (d0, q0, r0, m0, ‘emon/emontx/temp0’, … (2 bytes))
1474197944: Sending PUBLISH to openhab.1474197199202 (d0, q0, r0, m0, ‘emon/emontx/temp0’, … (2 bytes))
1474197944: Received DISCONNECT from mosqpub/23840-blacklap2
But although the arduinos publish (and mosquitto re-publishes to openhab) I don’t see it appear in OpenHab.
localhost>tail /var/log/mosquitto.conf (after arduino publish):
1474198626: Received PUBLISH from bbtemps1 (d0, q0, r0, m0, 'emon/emontx/temp0', ... (9 bytes))
1474198626: Sending PUBLISH to mosq/I0kZJ9M9cVq:sxNY35 (d0, q0, r0, m0, 'emon/emontx/temp0', ... (9 bytes))
1474198626: Sending PUBLISH to openhab.1474197199202 (d0, q0, r0, m0, 'emon/emontx/temp0', ... (9 bytes))
I can subscribe to the topics fine. I’ve turned off all authentication. Config # openhab.cfg: mqtt only relevant line: mqtt:mosquitto.url=tcp://localhost:1883 # default.items: also tried a plain string here, to no avail Number emonth_t0 "Friends Room [%.1f°C]" { mqtt="<[mosquitto:emon/emontx/temp0:state:default]" }
It seems OpenHAB sees the MQTT values from the arduinos, but does not understand them?
I think you’re referring to the items listed in “default.items” . I listed that under “config” heading (3,4 line) in the question. If that’s not it, where are “item configs”? Apologies for my newbieness…
What appears in openhab.log?
Yes, there are errors when arduino publishs data:
localhost>tail -F /var/log/openhab.log
2016-09-19 17:53:02.703 [WARN ] [.c.i.events.EventPublisherImpl] - given new state is NULL, couldn’t post update for ‘emonth_t4’
2016-09-19 17:53:02.988 [WARN ] [.c.i.events.EventPublisherImpl] - given new state is NULL, couldn’t post update for ‘emonth_t8’
2016-09-19 17:53:06.231 [WARN ] [.c.i.events.EventPublisherImpl] - given new state is NULL, couldn’t post update for ‘emonth_t2’
Is there any chance at all that the Arduino code that is publishing these numbers is formatting them in such a way that there are non-numeric characters in the message, such as padding with spaces before or after the digits, or using thousands separator characters, or using a comma instead of a period as a decimal separator? The openHAB log messages are consistent with trying to parse numbers but the MQTT message contained unacceptable characters.
Exactly! Indeed there is a whitespace issue (hint: “9 bytes” in the log). Yes, I found that whitespace fails in OpenHAB parsing. For others’ sakes, I’ll tell you that I changed Arduino sketch from:
dtostrf(tempC,-(PRINT_BUFFER_LEN-2),2,valCharStar); // oh no! now valCharStar is whitespace buffered - poison to OpenHAB
to String valString = dtostrf(tempC,-(PRINT_BUFFER_LEN-2),2,valCharStar); valString.trim(); // remove poison whitespace
This is a difficult error to debug (as whitespace is invisible using mosquitto_pub / _sub).
Thanks again for your help. It’s working nicely now.