module("relaynode2", package.seeall) require("xap.bsc") jeenode = require("xap.jeenode") Nodule = jeenode.Nodule class = require("pl.class") require("pl") class.RelayNode2(Nodule) -- create BSC endpoints function RelayNode2:build(...) Nodule.build(self, ...) self:add {key="relay1", direction=bsc.OUTPUT, type=bsc.BINARY, cmdCB=function(e) self:RelayCmd(e) end} self:add {key="temp1", direction=bsc.INPUT, type=bsc.STREAM} self:add {key="temp2", direction=bsc.INPUT, type=bsc.STREAM} self:add {key="relay2", direction=bsc.OUTPUT, type=bsc.BINARY, cmdCB=function(e) self:RelayCmd(e) end} end function RelayNode2:RelayCmd(e) local relay = e.key:sub(-1) self:sender(relay..","..tonumber( utils.choose(e.state=="off",0,1))) end function RelayNode2:process(data) --[[ -- From the relaynode2.pde Sketch struct { int temp1 :10; // temperature: -500..+500 (tenths) int temp2 :10; // temperature: -500..+500 (tenths) byte relay1 :1; //relay feedback state returned from jeenode byte relay2 :1; //relay feedback state returned from jeenode } payload; --]] local te1,te2,r1,r2 = jeenode.bitslicer(data,10,10,1,1) -- unsigned temp cannot go negative but can go above 50C te1 = te1 / 10 te2 = te2 / 10 -- Add the temperature offset if one has been supplied if self.cfg.toff then te1 = te1 + self.cfg.toff te2 = te2 + self.cfg.toff end -- The keys here must match the key values from the self:add{key=x} Nodule.process(self,{temp1=te1, temp2=te2, relay1=r1, relay2=r2}) end