Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DS18x20 only some out of all sensors published #1215

Closed
ThomDietrich opened this issue Nov 18, 2017 · 14 comments
Closed

DS18x20 only some out of all sensors published #1215

ThomDietrich opened this issue Nov 18, 2017 · 14 comments

Comments

@ThomDietrich
Copy link
Contributor

Hello,
I've got a Sonoff Basic with two DS18b20 connected. It's well configured and values for both sensors are correct. The problem is, that at times only one of the two sensors is covered by the SENSOR topic message.

openHAB prints an error message each time that happens. openHAB will look for the defined JSONpath selector and print an error if it can't be found:

2017-11-18 13:11:43.252 [ERROR] [.mqtt.internal.MqttMessageSubscriber] - Error processing MQTT message.
org.openhab.core.transform.TransformationException: Invalid path '$.DS18x20.DS2.Temperature' in '{"Time":"2017-11-18T13:11:42", "DS18x20":{"DS1":{"Type":"DS18B20", "Address":"28D025FB05000020", "Temperature":3.0}}, "TempUnit":"C"}'
        at org.openhab.core.transform.TransformationHelper$TransformationServiceDelegate.transform(TransformationHelper.java:67) [179:org.openhab.core.compat1x:2.2.0.201711152010]
        at org.openhab.binding.mqtt.internal.MqttMessageSubscriber.processMessage(MqttMessageSubscriber.java:138) [211:org.openhab.binding.mqtt:1.11.0.201711160210]
        at org.openhab.io.transport.mqtt.internal.MqttBrokerConnection.messageArrived(MqttBrokerConnection.java:556) [219:org.openhab.io.transport.mqtt:1.11.0.201711160210]
        at org.eclipse.paho.client.mqttv3.internal.CommsCallback.deliverMessage(CommsCallback.java:475) [219:org.openhab.io.transport.mqtt:1.11.0.201711160210]
        at org.eclipse.paho.client.mqttv3.internal.CommsCallback.handleMessage(CommsCallback.java:379) [219:org.openhab.io.transport.mqtt:1.11.0.201711160210]
        at org.eclipse.paho.client.mqttv3.internal.CommsCallback.run(CommsCallback.java:183) [219:org.openhab.io.transport.mqtt:1.11.0.201711160210]
        at java.lang.Thread.run(Thread.java:748) [?:?]

I could live with the error and it doesn't cause any further issues. However I wonder if this is the desired way of operation. If there are two sensors, shouldn't both be published at all times?

Best!

@arendst
Copy link
Owner

arendst commented Nov 18, 2017

If a sensor readout supplies wrong data according to crc I do not want to send the unreliable data so sometimes a sensor is not reported.

@ThomDietrich
Copy link
Contributor Author

ThomDietrich commented Nov 18, 2017

I see. A retry is not an option? Any other ideas how to resolve this?

@ionciubotaru
Copy link

ionciubotaru commented Nov 19, 2017

send status 10 until you receive information from both sensors

@ThomDietrich
Copy link
Contributor Author

that's not solving the issue. I'm asking for a controller side retry...

@arendst
Copy link
Owner

arendst commented Nov 21, 2017

A correct reread of the sensor involves a re-convert taking up to almost a second for 12-bit conversion which in turn hold up the reporting cycle.

If all is well the next teleperiod this re-convert cycle is performed and the sensor should provide a valid readout.

@ThomDietrich
Copy link
Contributor Author

ThomDietrich commented Nov 21, 2017

Yes, understood. Still the issue remains: The json response does not contain data expected by openHAB and will hence yield the warning seen above. Because of possible causes for such a case I'd say that openHAB behaves right and this needs to be addressed on the Sonoff side. Do you see a possible solution or will we have to live with that warning? It's not ideal, on the other side I am probably one of only a few users with more than one sensor connected.

@arendst
Copy link
Owner

arendst commented Nov 21, 2017

I see no other solution than that openHAB has to check what data is in the JSON message. If a sensor is not there openHAB should not try to use it. That's the advantage of JSON; you can dynamically provide information.

@ThomDietrich
Copy link
Contributor Author

I see. I suppose you are right. The problem is, that openHAB offers MQTT topic subscription and jsonpath transformation as two separate functions. We would need to check which part needs to be improved to support partial json responses. Either the jsonpath or all transformation services or the MQTT binding or a combination of both.
@davidgraeff what's your opinion on the matter, related to eclipse-archived/smarthome#3876 ?

@davidelang
Copy link
Collaborator

davidelang commented Nov 21, 2017 via email

@arendst
Copy link
Owner

arendst commented Nov 24, 2017

I rewrote xsns_05_ds18x20.ino to accomodate the DS1822 (obsolete but nice to have). Other changes that might influence your experience are:

  • Sensor probing only done once at power on. This eliminates lost sensors due to dynamic probing
  • Address display corrected as the original calculation was reversed and showed both CRC and device type too.
  • Add debug information regarding amount of sensors found and CRC errors.

To be released in next (pre)release.

arendst added a commit that referenced this issue Nov 24, 2017
5.9.1i
 * Fix Arilux LC11 restart exception 0 after OTA upgrade
 *
Disabled CRC lookup-table in OneWire.h (#define ONEWIRE_CRC8_TABLE 0) to
save some code space
 * Rewrite xsns_05_ds18x20.ino adding support for
DS1822, correct address calculation and force setting 12-bit resolution
(#1222)
 * DS18x20 sensor reconfiguration now only probed at restart
removing dynamic connection and intermittent sensor loss (#1215)
arendst added a commit that referenced this issue Nov 27, 2017
5.9.1j
 * Revert changes to xsns_05_ds18x20.ino and rename to
xsns_05_ds18x20_legacy.ino still needing library OneWire and providing
legacy JSON message:
 *
"DS18x20":{"DS1":{"Type":"DS18B20","Address":"284CC48E04000079","Temperature":19.5},"DS2":{"Type":"DS18B20","Address":"283AC28304000052","Temperature":19.6}}

* Add new xdrv_05_ds18x20.ino free from library OneWire and add the
following features:
 *  Add support for DS1822
 *  Add forced setting of
12-bit resolution for selected device types (#1222)
 *  Add read
temperature retry counter (#1215)
 *  Fix lost sensors by performing
sensor probe at restart only thereby removing dynamic sensor probe
(#1215)
 *  Fix sensor address sorting using ascending sort on sensor
type followed by sensor address
 *  Rewrite JSON resulting in shorter
message allowing more sensors in default firmware image:
 *
"DS18B20-1":{"Id":"00000483C23A","Temperature":19.5},"DS18B20-2":{"Id":"0000048EC44C","Temperature":19.6}

* Add additional define in user_config.h to select either single sensor
(defines disabled), new multi sensor (USE_DS18X20) or legacy multi
sensor (USE_DS18X20_LEGACY)
 * Add support for Sonoff Dual R2 (#1249)
 *
Fix ADS1115 detection (#1258)
@davidgraeff
Copy link

@ThomDietrich The proposed new OpenHab/ESH MQTT Things and their channels can be configured with an optional transformation. If the requested transformation does not yield a valid result, the Thing channel is not updated. "partial json" as you call it works out of the box.

@ThomDietrich
Copy link
Contributor Author

@davidgraeff amazing! ;) Thanks again for the said PR.
@arendst with that the issue is settled.

@jhlweb
Copy link

jhlweb commented Nov 28, 2017

@arendst, Can the dynamic probing be made into an compile option? All above reasons are greet but dynamic probing is something i use. I also use OH2 and i made script that controls that part of the dynamic probing as a feature. ( I also alter the Tasmota firmware every time to add CLEINT_ID to the TELE and STAT json because OpenHab doesn't have the capability to parse the topic to a script and my sensor are all on the same topic see also #975)

@arendst
Copy link
Owner

arendst commented Nov 28, 2017

@jhlweb Just stick to the legacy version then which still has dynamic probing (and loss).

arendst added a commit that referenced this issue Dec 1, 2017
5.10.0 20171201
 * Upgrade library ArduinoJson to 5.11.2
 * Upgrade
library IRRemoteEsp8266 to 2.2.1 + 2 commits but disabled some protocols
(code size reduction)
 * Upgrade library NeoPixelBus to 2.2.9
 * Upgrade
library OneWire to 2.3.3 + 6 commits and disabled CRC lookup-table
(#define ONEWIRE_CRC8_TABLE 0) (code size reduction)
 * Update library
PubSubClient to 2.6 + 9 commits and additional delay (#790)
 * Update
core_esp8266_wiring_digital.c to latest (staged) level
 * Patch library
I2Cdevlib-Core for esp8266-core 2.4.0-rc2 compatibility
 * Remove
command EnergyReset 1..3 now replaced by ENergyReset1 to EnergyReset3
 *
Remove spaces in JSON messages (code size reduction)
 * Renamed
xsns_05_ds18x20.ino to xsns_05_ds18x20_legacy.ino still using library
OneWire and providing dynamic sensor scan
 * Fix possible iram1_0_seg
compile error by shrinking ICACHE_RAM_ATTR code usage
 * Fix PWM
watchdog timeout if Dimmer is set to 100 or Color set to 0xFF (#1146)
 *
Fix Sonoff Bridge Learn Mode hang caused by unrecognised RF code
(#1181)
 * Fix blank console log window by using XML character encoding
(#1187)
 * Fix wrong response name for command HlwISet (#1214)
 * Fix
DHT type sensor timeout recognition by distinguish "signal already
there" from "timeout" (#1233)
 * Add fixed color options 1..12 to
command Color
 * Add + (plus) and - (minus) to commands Dimmer
(+10/-10), Speed and Scheme
 * Add + (plus) and - (minus) to command
Color to select 1 out of 12 preset colors
 * Add + (plus) and - (minus)
to command Ct to control ColdWarm led ColorTemperature (+34/-34)
 * Add
commands EnergyReset1 0..42500, EnergyReset2 0..42500 and EnergyReset3
0..42500000
 *  to (Re)set Energy Today, Yesterday or Total respectively
in Wh (#406, #685, #1202)
 * Add optional ADS1115 driver as alternative
for unsupported I2Cdevlib in esp8266-core 2.4.0-rc2
 * Add support for
INA219 Voltage and Current sensor to be enabled in user_config.h with
define USE_INA219
 * Add support for Arilux LC11 (Clearing RF home code
when selecting no Arilux module)
 * Add support for WS2812 RGBW
ledstrips to be enabled in user_config.h with define USE_WS2812_CTYPE
(#1156)
 * Add SettingsSaveAll routine to command SaveData to be used
before controlled power down (#1202)
 * Add option PUSHBUTTON_TOGGLE
(SwitchMode 7) to allow toggling on any switch change (#1221)
 * Add new
xdrv_05_ds18x20.ino free from library OneWire and add the following
features:
 *  Add support for DS1822
 *  Add forced setting of 12-bit
resolution for selected device types (#1222)
 *  Add read temperature
retry counter (#1215)
 *  Fix lost sensors by performing sensor probe at
restart only thereby removing dynamic sensor probe (#1215)
 *  Fix
sensor address sorting using ascending sort on sensor type followed by
sensor address
 *  Rewrite JSON resulting in shorter message allowing
more sensors in default firmware image:
 *
"DS18B20-1":{"Id":"00000483C23A","Temperature":19.5},"DS18B20-2":{"Id":"0000048EC44C","Temperature":19.6}

* Add additional define in user_config.h to select either single sensor
(defines disabled), new multi sensor (USE_DS18X20) or legacy multi
sensor (USE_DS18X20_LEGACY)
 * Add clock support for more different
pixel counts (#1226)
 * Add support for Sonoff Dual R2 (#1249)
 * Add
FriendlyName to web page tab and add program information to web page
footer (#1275)
curzon01 pushed a commit to curzon01/Tasmota that referenced this issue Sep 6, 2018
5.9.1i
 * Fix Arilux LC11 restart exception 0 after OTA upgrade
 *
Disabled CRC lookup-table in OneWire.h (#define ONEWIRE_CRC8_TABLE 0) to
save some code space
 * Rewrite xsns_05_ds18x20.ino adding support for
DS1822, correct address calculation and force setting 12-bit resolution
(arendst#1222)
 * DS18x20 sensor reconfiguration now only probed at restart
removing dynamic connection and intermittent sensor loss (arendst#1215)
curzon01 pushed a commit to curzon01/Tasmota that referenced this issue Sep 6, 2018
5.9.1j
 * Revert changes to xsns_05_ds18x20.ino and rename to
xsns_05_ds18x20_legacy.ino still needing library OneWire and providing
legacy JSON message:
 *
"DS18x20":{"DS1":{"Type":"DS18B20","Address":"284CC48E04000079","Temperature":19.5},"DS2":{"Type":"DS18B20","Address":"283AC28304000052","Temperature":19.6}}

* Add new xdrv_05_ds18x20.ino free from library OneWire and add the
following features:
 *  Add support for DS1822
 *  Add forced setting of
12-bit resolution for selected device types (arendst#1222)
 *  Add read
temperature retry counter (arendst#1215)
 *  Fix lost sensors by performing
sensor probe at restart only thereby removing dynamic sensor probe
(arendst#1215)
 *  Fix sensor address sorting using ascending sort on sensor
type followed by sensor address
 *  Rewrite JSON resulting in shorter
message allowing more sensors in default firmware image:
 *
"DS18B20-1":{"Id":"00000483C23A","Temperature":19.5},"DS18B20-2":{"Id":"0000048EC44C","Temperature":19.6}

* Add additional define in user_config.h to select either single sensor
(defines disabled), new multi sensor (USE_DS18X20) or legacy multi
sensor (USE_DS18X20_LEGACY)
 * Add support for Sonoff Dual R2 (arendst#1249)
 *
Fix ADS1115 detection (arendst#1258)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants