US100 Ultrasonic Distance Sensor (problem with parseBase64Binary)

item:

String Hydrogen_Peroxide_Sensor {serial="/dev/ttyPort2@9600,BASE64"}

rule:

rule "Ping Sensors"
when
  Time cron "0/10 * * * * ?"
then
  sendCommand(Hydrogen_Peroxide_Sensor, '\u0055')
end

and:

rule "Hydrogen_Peroxide_Sensor"
when
  Item Hydrogen_Peroxide_Sensor received update
then
  val to64 = DatatypeConverter::parseBase64Binary(Hydrogen_Peroxide_Sensor.state.toString)
  val ByteBuffer bb = ByteBuffer::wrap(to64)
  if (bb.array.size >= 2) {
    val short distance = bb.getShort
    logInfo("Peroxide", "Distance: " + distance)
   }
end

output:

2017-01-30 14:30:26.549 [INFO ] [runtime.busevents             ] - Hydrogen_Peroxide_Sensor received command U
2017-01-30 14:30:26.760 [INFO ] [runtime.busevents             ] - Hydrogen_Peroxide_Sensor state updated to AO+/vQ==
2017-01-30 14:30:26.762 [INFO ] [.openhab.model.script.Hydrogen] - Distance: 239
2017-01-30 14:30:41.325 [INFO ] [runtime.busevents             ] - Hydrogen_Peroxide_Sensor received command U
2017-01-30 14:30:41.536 [INFO ] [runtime.busevents             ] - Hydrogen_Peroxide_Sensor state updated to AO+/vQ==
2017-01-30 14:30:41.539 [INFO ] [.openhab.model.script.Hydrogen] - Distance: 239
2017-01-30 14:30:56.548 [INFO ] [runtime.busevents             ] - Hydrogen_Peroxide_Sensor received command U
2017-01-30 14:30:56.758 [INFO ] [runtime.busevents             ] - Hydrogen_Peroxide_Sensor state updated to AO+/vQ==
2017-01-30 14:30:56.760 [INFO ] [.openhab.model.script.Hydrogen] - Distance: 239
2017-01-30 14:31:11.327 [INFO ] [runtime.busevents             ] - Hydrogen_Peroxide_Sensor received command U
2017-01-30 14:31:11.538 [INFO ] [runtime.busevents             ] - Hydrogen_Peroxide_Sensor state updated to AO+/vQ==
2017-01-30 14:31:11.540 [INFO ] [.openhab.model.script.Hydrogen] - Distance: 239

However if I debug in a serial console and send 55 hex I get back 00 89 the correct distance in mm, if I move the sensor and debug the serial console I get varying responses, however in my openHAB rule I always just get 239…

Any ideas?

If I have openHAB send the 55 hex and just view in gtkterm hex I see:

00 A4 00 A4 00 A4 00 A9 00 8E 00 8A 00 8A

So I know the sensor is working correctly, what I don’t understand is why I always receive the same BigHex and converted decimal in openHAB when I move the sensor the same way.

I found a serial monitoring program so I can see whats going in and out of the serial port, it let me run my rule in openHAB and monitor at the same time.

root@maggie interceptty-0.6 # ./interceptty -s 'ispeed 9600 ospeed 9600' /dev/ttyUSB11 /dev/ttyPort8
< 0x55 (U)
> 	0x00
> 	0x89
< 0x55 (U)
> 	0x00
> 	0x89
< 0x55 (U)
> 	0x00
> 	0x89
< 0x55 (U)
> 	0x00
> 	0x89
< 0x55 (U)
> 	0x00
> 	0xbd
< 0x55 (U)
> 	0x00
> 	0xbf
< 0x55 (U)
> 	0x00
> 	0xc7

So you can see that openHAB sends 0x55 and gets back different data as I move the sensor, however openHAB logs show the same thing coming back every time : (

2017-01-30 17:27:11.851 [INFO ] [runtime.busevents             ] - Hydrogen_Peroxide_Sensor received command U
2017-01-30 17:27:12.064 [INFO ] [runtime.busevents             ] - Hydrogen_Peroxide_Sensor state updated to AO+/vQ==
2017-01-30 17:27:12.065 [INFO ] [.openhab.model.script.Hydrogen] - Distance: 239
2017-01-30 17:27:12.065 [INFO ] [.openhab.model.script.Hydrogen] - Distance: AO+/vQ==
2017-01-30 17:27:22.312 [INFO ] [runtime.busevents             ] - Hydrogen_Peroxide_Sensor received command U
2017-01-30 17:27:22.526 [INFO ] [runtime.busevents             ] - Hydrogen_Peroxide_Sensor state updated to AO+/vQ==
2017-01-30 17:27:22.529 [INFO ] [.openhab.model.script.Hydrogen] - Distance: 239
2017-01-30 17:27:22.530 [INFO ] [.openhab.model.script.Hydrogen] - Distance: AO+/vQ==
2017-01-30 17:27:33.175 [INFO ] [runtime.busevents             ] - Hydrogen_Peroxide_Sensor received command U
2017-01-30 17:27:33.290 [INFO ] [runtime.busevents             ] - Hydrogen_Peroxide_Sensor state updated to AO+/vQ==
2017-01-30 17:27:33.293 [INFO ] [.openhab.model.script.Hydrogen] - Distance: 239
2017-01-30 17:27:33.294 [INFO ] [.openhab.model.script.Hydrogen] - Distance: AO+/vQ==
2017-01-30 17:27:41.904 [INFO ] [runtime.busevents             ] - Hydrogen_Peroxide_Sensor received command U
2017-01-30 17:27:42.118 [INFO ] [runtime.busevents             ] - Hydrogen_Peroxide_Sensor state updated to AO+/vQ==
2017-01-30 17:27:42.119 [INFO ] [.openhab.model.script.Hydrogen] - Distance: 239
2017-01-30 17:27:42.119 [INFO ] [.openhab.model.script.Hydrogen] - Distance: AO+/vQ==
2017-01-30 17:27:50.194 [INFO ] [runtime.busevents             ] - Hydrogen_Peroxide_Sensor received command U
2017-01-30 17:27:50.408 [INFO ] [runtime.busevents             ] - Hydrogen_Peroxide_Sensor state updated to AO+/vQ==
2017-01-30 17:27:50.408 [INFO ] [.openhab.model.script.Hydrogen] - Distance: 239
2017-01-30 17:27:50.409 [INFO ] [.openhab.model.script.Hydrogen] - Distance: AO+/vQ==
2017-01-30 17:28:03.979 [INFO ] [runtime.busevents             ] - Hydrogen_Peroxide_Sensor received command U
2017-01-30 17:28:04.195 [INFO ] [runtime.busevents             ] - Hydrogen_Peroxide_Sensor state updated to AO+/vQ==
2017-01-30 17:28:04.197 [INFO ] [.openhab.model.script.Hydrogen] - Distance: 239
2017-01-30 17:28:04.198 [INFO ] [.openhab.model.script.Hydrogen] - Distance: AO+/vQ==
2017-01-30 17:28:10.999 [INFO ] [runtime.busevents             ] - Hydrogen_Peroxide_Sensor received command U
2017-01-30 17:28:11.213 [INFO ] [runtime.busevents             ] - Hydrogen_Peroxide_Sensor state updated to AO+/vQ==
2017-01-30 17:28:11.213 [INFO ] [.openhab.model.script.Hydrogen] - Distance: 239
2017-01-30 17:28:11.214 [INFO ] [.openhab.model.script.Hydrogen] - Distance: AO+/vQ==

Have you tried enabling debug logging for the serial binding?

2017-01-31 08:58:10 DEBUG o.o.b.s.internal.SerialDevice[:282]- Writing 'U' to serial port /dev/ttyPort2
2017-01-31 08:58:11 DEBUG o.o.b.s.internal.SerialDevice[:225]- Received message '�' on serial port /dev/ttyPort2
2017-01-31 08:58:23 DEBUG o.o.b.s.internal.SerialDevice[:282]- Writing 'U' to serial port /dev/ttyPort2
2017-01-31 08:58:23 DEBUG o.o.b.s.internal.SerialDevice[:225]- Received message '�' on serial port /dev/ttyPort2
2017-01-31 08:58:40 DEBUG o.o.b.s.internal.SerialDevice[:282]- Writing 'U' to serial port /dev/ttyPort2
2017-01-31 08:58:40 DEBUG o.o.b.s.internal.SerialDevice[:225]- Received message '�' on serial port /dev/ttyPort2

However that does not match what is actually sent to the serial port.

-Dfile.encoding=ISO-8859-1

Solved the problem.

1 Like