|
| 1 | +////////////* MerryIot Open/Close sensor*//////////// |
| 2 | + |
| 3 | +//hex to binary function |
| 4 | +function hex2bin(hex){ |
| 5 | + return (parseInt(hex, 16).toString(2)).padStart(8, '0'); |
| 6 | +} |
| 7 | + |
| 8 | +//MerryIot Open/Close sensor |
| 9 | +function decodeUplink(input) { |
| 10 | + let fPort = input.fPort; |
| 11 | + let payloadlens = input.bytes.length; |
| 12 | + if(fPort==120 && payloadlens==10){ |
| 13 | + let intput_list = input.bytes; |
| 14 | + let battery_int = intput_list[1]; |
| 15 | + let battery_volt = (21 + battery_int) / 10; |
| 16 | + |
| 17 | + let temperature_hex = intput_list[3].toString(16).padStart(2, '0') + intput_list[2].toString(16).padStart(2, '0'); |
| 18 | + let temperature_val = parseInt(temperature_hex, 16); |
| 19 | + let temperature = temperature_val > 1250 ? (temperature_val - 65536) / 10 : temperature_val / 10; |
| 20 | + |
| 21 | + let humi = intput_list[4]; |
| 22 | + |
| 23 | + let door_hex = intput_list[0].toString(16).padStart(2, '0'); |
| 24 | + let door_binary = hex2bin(door_hex); |
| 25 | + let open_st = door_binary.substring(7, 8); |
| 26 | + let button_st = door_binary.substring(6, 7); |
| 27 | + let tamper_st = door_binary.substring(5, 6); |
| 28 | + let tilt_st = door_binary.substring(4, 5); |
| 29 | + |
| 30 | + let open = parseInt(open_st); |
| 31 | + let button = parseInt(button_st); |
| 32 | + let tamper = parseInt(tamper_st); |
| 33 | + let tilt = parseInt(tilt_st); |
| 34 | + |
| 35 | + let time_hex = intput_list[6].toString(16).padStart(2, '0') + intput_list[5].toString(16).padStart(2, '0'); |
| 36 | + let time = parseInt(time_hex, 16); |
| 37 | + |
| 38 | + let count_hex = intput_list[9].toString(16).padStart(2, '0') + intput_list[8].toString(16) + intput_list[7].toString(16).padStart(2, '0'); |
| 39 | + let count = parseInt(count_hex, 16); |
| 40 | + |
| 41 | + return { |
| 42 | + data: { |
| 43 | + battery_volt, |
| 44 | + temperature, |
| 45 | + humi, |
| 46 | + open, |
| 47 | + button, |
| 48 | + tamper, |
| 49 | + tilt, |
| 50 | + time, |
| 51 | + count |
| 52 | + }, |
| 53 | + }; |
| 54 | + } |
| 55 | + else if (fPort==120 && payloadlens==9){ |
| 56 | + let intput_list = input.bytes; |
| 57 | + let battery_int = intput_list[1]; |
| 58 | + let battery_volt = (21 + battery_int) / 10; |
| 59 | + |
| 60 | + let temperature_int = intput_list[2]; |
| 61 | + let temperature; |
| 62 | + if(temperature_int > 125){ |
| 63 | + temperature = temperature_int - 256; |
| 64 | + } else { |
| 65 | + temperature = temperature_int; |
| 66 | + } |
| 67 | + |
| 68 | + let humi = intput_list[3]; |
| 69 | + |
| 70 | + let door_hex = intput_list[0].toString(16).padStart(2, '0'); |
| 71 | + let door_binary = hex2bin(door_hex); |
| 72 | + let open_st = door_binary.substring(7, 8); |
| 73 | + let button_st = door_binary.substring(6, 7); |
| 74 | + let tamper_st = door_binary.substring(5, 6); |
| 75 | + let tilt_st = door_binary.substring(4, 5); |
| 76 | + |
| 77 | + let open = parseInt(open_st); |
| 78 | + let button = parseInt(button_st); |
| 79 | + let tamper = parseInt(tamper_st); |
| 80 | + let tilt = parseInt(tilt_st); |
| 81 | + |
| 82 | + let time_hex = intput_list[5].toString(16).padStart(2, '0') + intput_list[4].toString(16).padStart(2, '0'); |
| 83 | + let time = parseInt(time_hex, 16); |
| 84 | + |
| 85 | + let count_hex = intput_list[8].toString(16).padStart(2, '0') + intput_list[7].toString(16).padStart(2, '0') + intput_list[6].toString(16).padStart(2, '0'); |
| 86 | + let count = parseInt(count_hex, 16); |
| 87 | + |
| 88 | + return { |
| 89 | + data: { |
| 90 | + battery_volt, |
| 91 | + temperature, |
| 92 | + humi, |
| 93 | + open, |
| 94 | + button, |
| 95 | + tamper, |
| 96 | + tilt, |
| 97 | + time, |
| 98 | + count |
| 99 | + }, |
| 100 | + }; |
| 101 | + } |
| 102 | + else{ |
| 103 | + return { |
| 104 | + data: { |
| 105 | + fPort: input.fPort, |
| 106 | + payloadlength: input.bytes.length, |
| 107 | + message: 'Invalid fPort or payload length' |
| 108 | + }, |
| 109 | + }; |
| 110 | + } |
| 111 | +} |
| 112 | + |
| 113 | +////////////* MerryIot Open/Close sensor End !!*//////////// |
| 114 | + |
| 115 | +/** |
| 116 | + * Encode downlink function. |
| 117 | + * |
| 118 | + * @param {object} input |
| 119 | + * @param {object} input.data Object representing the payload that must be encoded. |
| 120 | + * @param {Record<string, string>} input.variables Object containing the configured device variables. |
| 121 | + * |
| 122 | + * @returns {{bytes: number[]}} Byte array containing the downlink payload. |
| 123 | + */ |
| 124 | +function encodeDownlink(input) { |
| 125 | + return { |
| 126 | + // bytes: [225, 230, 255, 0] |
| 127 | + }; |
| 128 | +} |
0 commit comments