openhab / openhab-addons

Add-ons for openHAB
https://www.openhab.org/
Eclipse Public License 2.0
1.9k stars 3.59k forks source link

[proteusecometer] Inconsistent values #13266

Open BillGOH opened 2 years ago

BillGOH commented 2 years ago

First of all thanks for this great binding. I was looking for a suitable cistern sensor for a long time - and did not see that openHAB had the solution right in front of my eyes, the Proteus Ecometer binding. The possibility to read the values of the receiver via USB is not documented by the manufacturer.

Yet, after testing the binding and the sensor, there are three (small) issues:

  1. The temperature sensor on the display shows realistic values (at the moment 30 °C), the binding shows another value (at the moment 43,9 °C). From the source code I saw that the temperature might be read in Fahrenheit. Maybe there is a conversion error?
  2. The description of the temperature channel is misleading. It says: "Temperature measured by the sensor." Unfortunately it is not the temperature measured by the sensor but by the receiver.
  3. The sensor level value on the receiver (at the moment 65 cm) and the binding differ (at the moment 105 cm).

My system: openHAB 3.3 with openHABian an a Raspi 4B.

jlaur commented 2 years ago
  1. The temperature sensor on the display shows realistic values (at the moment 30 °C), the binding shows another value (at the moment 43,9 °C). From the source code I saw that the temperature might be read in Fahrenheit. Maybe there is a conversion error?

I don't own a Proteus EcoMeter myself, but for whoever will pick up this PR, it might be of interest if you could provide some logs with TRACE level. I can see that the binding logs the raw values, which are in Fahrenheit as you correctly assumed.

How do you see the value "43,9 °C" - can you show your configuration (e.g. item definition)? openHAB will automatically convert from Fahrenheit to Celsius since UoM is supported by the binding - if you have Celsius configured.

BillGOH commented 2 years ago

Hello @jlaur. Thank you for your response.

Unfortunately, the TRACE log only reports the following:

2022-08-20 19:01:03.585 [TRACE] [al.ecometers.ProteusEcoMeterSService] - Received hex string: 534900160210123933EE6A800E6D002E0F27138DF914

2022-08-20 19:01:03.586 [TRACE] [nal.ecometers.ProteusEcoMeterSParser] - Received hex string: 534900160210123933EE6A800E6D002E0F27138DF914

2022-08-20 19:01:03.596 [TRACE] [al.ecometers.ProteusEcoMeterSService] - Input stream opened for the port

So I cannot really see any raw data.

The item definition looks like that:

{
  "link": "http://192.168.202.200:8080/rest/items/Zisterne_Temperatur",
  "state": "42.77777777777778 °C",
  "stateDescription": {
    "pattern": "%.1f %unit%",
    "readOnly": true,
    "options": []
  },
  "editable": true,
  "type": "Number:Temperature",
  "name": "Zisterne_Temperatur",
  "label": "Temperatur",
  "category": "",
  "tags": [
    "Point"
  ],
  "groupNames": [
    "Zisterne"
  ]
}
wborn commented 2 years ago

Maybe @2chilled can help with fixing this bug?

BillGOH commented 2 years ago

I did some testing with the HEX string. The temperature value retrieved according to the source code is 109 °F, which is 42,7 °C, whereas the correct value should be around 30 °C. So maybe the interpretation of the HEX string by the binding is wrong? I could not found official data on this topic by the manufacturer.

2chilled commented 1 year ago

@BillGOH Sorry for not responding earlier, somehow @wborn's ping didn't reach me.

Thanks for your detailed bug report!

Unfortunately it is not the temperature measured by the sensor but by the receiver.

Hm, this is interesting. I'm pretty sure in my case it's the one measured by the sensor. My sensor is outdoor, and it's temperature curve over one year clearly mimics outdoor temperate curve. I'm afraid we don't have the same product?

The sensor level value on the receiver (at the moment 65 cm) and the binding differ (at the moment 105 cm).

The fact that they differ is ok, since the receiver (at least in my case) shows distance to cistern bottom while the binding shows distance to water surface. But, again, your values don't fit at all, supporting the different sensor theory.

BillGOH commented 1 year ago

Hello @2chilled, thanks for your reply. I have this sensor https://www.proteus-sensor.de/#EcoMeterS.

The display definitely shows the room temperature, so I thought this must be the temperature read by the binding. In any case the value is strange.

Thanks for your explanation of the sensor level value.

lsiepel commented 3 months ago

It has been a while and it does not seem to be resolved yet. If i recap correctly the binding receives hex string 534900160210123933EE6A800E6D002E0F27138DF914 and that translates to 109 °F / 42.8 °C while the actual temperature is something like 30 °C on the device. Similar issue happens with the distance measured 65cm vs 105cm.

So a conclusion is that this hex string is not properly interpreted or the logic is different for this device, a datasheet seems to be missing. @2chilled how did you known about the initial logic regarding the hex string?

2chilled commented 3 months ago

@lsiepel The protocol used by sensor and receiver is proprietary. I have reverse engineered the parts which the binding supports. Also found some reverse engineering work in the wild if I remember correctly.

I'm a bit short on time, but now the ticket is on my radar again.