diff --git a/src/protocols/switch29.coffee b/src/protocols/switch29.coffee new file mode 100644 index 0000000..0c61f85 --- /dev/null +++ b/src/protocols/switch29.coffee @@ -0,0 +1,96 @@ +module.exports = function(helper) { + var binaryToPulse, protocolInfo, pulsesToBinaryMapping; + pulsesToBinaryMapping = { + '10': '1', + '01': '0', + '02': '' + }; + binaryToPulse = { + '0': '01', + '1': '10' + }; + return protocolInfo = { + name: 'switch-conrad', + type: 'switch', + values: { + unit: { + type: "number" + }, + id: { + type: "number" + }, + remoteid: { + type: "number", + default: 2275840 + }, + state: { + type: "boolean" + } + }, + brands: ["Conrad RSL"], + pulseLengths: [650,1450,6890], + pulseCount: 32, + decodePulses: function(pulses) { + var binary, result; + binary = helper.map(pulses, pulsesToBinaryMapping); + return result = { + unitCode: helper.binaryToNumber(binary, 25, 28), + state: helper.binaryToBoolean(binary, 29) + }; + }, + encodeMessage: function(message) { + var remoteID, onPulse, newUnitCode, offPulse, prefix, state, unitCode; + prefix = "1001"; + +if (message.remoteid == null) { remoteID=2275840; } +else { remoteID = message.remoteid; } + +remoteID = helper.map(helper.numberToBinary(remoteID, 24), binaryToPulse); + +if (message.unit == 1) { newUnitCode=3; } +if (message.unit == 2) { newUnitCode=0; } +if (message.unit == 3) { newUnitCode=2; } +if (message.unit == 4) { newUnitCode=1; } + +if (message.id == 1) { + if (message.unit == 2) { + onPulse = "10101001"; + offPulse = "01010110"; + } else { + onPulse = "01101001"; + offPulse = "10101001"; + } +} +if (message.id == 2) { + if (message.unit == 2) { + onPulse = "01100110"; + offPulse = "10100110"; + } else { + onPulse = "10010110"; + offPulse = "01100110"; + } +} +if (message.id == 3) { + if (message.unit == 2) { + onPulse = "10010101"; + offPulse = "01100101"; + } else { + onPulse = "01010101"; + offPulse = "10010101"; + } +} +if (message.id == 4) { + if (message.unit == 2) { + onPulse = "01011001"; + offPulse = "10011001"; + } else { + onPulse = "10100101"; + offPulse = "01011001"; + } +} + unitCode = helper.map(helper.numberToBinary(newUnitCode, 2), binaryToPulse); + state = (message.state ? onPulse : offPulse); + return "" + prefix + unitCode + state + remoteID + "02"; + } + }; +}; diff --git a/src/protocols/weather17.coffee b/src/protocols/weather17.coffee new file mode 100644 index 0000000..bceb153 --- /dev/null +++ b/src/protocols/weather17.coffee @@ -0,0 +1,44 @@ +module.exports = function(helper) { + var protocolInfo, pulsesToBinaryMapping; + pulsesToBinaryMapping = { + '01': '0', + '10': '1', + '02': '' + }; + return protocolInfo = { + name: 'weather17', + type: 'weather', + values: { + temperature: { + type: "number" + }, + humidity: { + type: "number" + }, + channel: { + type: "number" + }, + id: { + type: "number" + }, + lowBattery: { + type: "boolean" + } + }, + brands: [ Arduino rc-switch weather station ], + pulseLengths: [350, 1068, 10984], + pulseCount: 74, + decodePulses: function(pulses) { + var binary, lowBattery, result; + binary = helper.map(pulses, pulsesToBinaryMapping); + lowBattery = !helper.binaryToBoolean(binary, 12); + return result = { + id: helper.binaryToNumber(binary, 4, 11), + channel: helper.binaryToNumber(binary, 14, 15) + 1, + temperature: helper.binaryToSignedNumber(binary, 16, 27) / 10, + humidity: helper.binaryToNumber(binary, 28, 35), + lowBattery: lowBattery + }; + } + }; +};