module(...,package.seeall) require("xap") require("xap.bsc") info={version="1.0", description="WH1080 decoder "} port="/dev/ttyUSB2" local v, k, Key, SensorValue sensor ={} function update(frame) local data = frame:getValue("serial.received","data") --print("Data received = ",data) local stnName, stnid, outtmp, outhum, wndavg, wndgst, wnddir, rain, lastdata, dataEnd = data:match("([^,]*):([^,]*):([^,]*):([^,]*):([^,]*):([^,]*):([^,]*):([^,]*):([^,]*):([^,]*)") --print("Name ",stnName) --print("ID ",stnid) --print("Temp ",outtmp) --print("Humi ",outhum) --print("Spd ",wndavg) --print("Gust ",wndgst) --print("Dir ",wnddir) --print("Rain ",rain) --print("Last Reading ",lastdata) sensor['temperatureout']:setText(outtmp) sensor['humidityout']:setText(outhum) sensor['windavg']:setText(wndavg) sensor['windgust']:setText(wndgst) sensor['winddirection']:setText(wnddir) sensor['rain']:setText(rain) sensor['lastread']:setText(lastdata) for _,v in ipairs(sensor) do v:sendEvent() end end function init() local serialSetup = [[ xap-header { class=Serial.Comms target=dbzoo.livebox.serial } Serial.Setup { port=%s baud=57600 stop=1 databits=8 parity=none flow=none }]] xap.sendShort(string.format(serialSetup, port)) for _,v in ipairs{'temperatureout','humidityout','windavg','windgust','winddirection','rain','lastread'} do sensor[v] = bsc.Endpoint{source="dbzoo.serial.sensor:WH1080."..v, direction=bsc.INPUT, type=bsc.STREAM} end f = xap.Filter() f:add("xap-header","source","dbzoo.livebox.Serial") f:add("serial.received","port",port) f:callback(update) end