After upgrade to 2.1.0-SNAPSHOT Build #839 I’ve got Serial binding working again and I want to share my quite simple setup.
Currently I’m interested only in temperature readings from my outdoor LaCrosse sensor. Other devices like neighbor’s doorbells could be added easily
Items:
String RFLinkRaw "RFLink raw data [%s]" <text> { serial="/dev/ttyUSB0@57600" }
Number TemperatureOut "Outside temperature (RFLink) [%.1f °C]" <temperature>
Rules:
// Lambda to convert temperature readings
val Functions$Function1<Number, BigDecimal> convertTemp = [ tempData |
if (tempData < 32768) { tempData/10 }
else { (32768 - tempData)/10 }
]
rule "RFLink"
when
Item RFLinkRaw received update
then
logInfo("RFLink", "raw data received: " + RFLinkRaw.state)
val RFbuffer = RFLinkRaw.state.toString.split(";")
// val RFprefix = RFbuffer.get(0)
// val RFstamp = RFbuffer.get(1)
val RFvendor = RFbuffer.get(2)
val RFidLong = RFbuffer.get(3)
val RFdata = RFbuffer.get(4)
val RFidHex = transform("REGEX", "ID=([0-9a-fA-F]*)", RFidLong)
switch (RFvendor + " " + RFidHex) {
case "LaCrosse 0400" : {
var String tempHex = transform("REGEX", "TEMP=([0-9a-f]{4})", RFdata)
var int tempDec = Integer::parseInt(tempHex, 16)
TemperatureOut.postUpdate(convertTemp.apply(tempDec)) }
case "SomeDevice 0000" : {
logInfo("RFLink", "some data received from " + RFvendor) }
default : logInfo("RFLink", "completely irrelevant data received from " + RFvendor)
}
end