-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathflow-LiFePO4.json
1 lines (1 loc) · 21.8 KB
/
flow-LiFePO4.json
1
[{"id":"685c789c0e2cf1ba","type":"tab","label":"LiFePO4","disabled":false,"info":"","env":[]},{"id":"53bdd21c883e1087","type":"inject","z":"685c789c0e2cf1ba","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"3","crontab":"","once":true,"onceDelay":"5","topic":"","payload":"","payloadType":"date","x":130,"y":400,"wires":[["ecbfe3cc2470266e"]]},{"id":"ecbfe3cc2470266e","type":"function","z":"685c789c0e2cf1ba","name":"rw RS484","func":"msg.timeout = 10000;\n\nvar charge = global.get(\"cFET\");\nvar discharge = global.get(\"dcFET\");\nvar Switchc = global.get(\"setSwitchc\");\nvar Switchdc = flow.get(\"setSwitchdc\");\n\n\nif (Switchc === true || Switchdc === true) { // If a switch has changed\n if (charge === false) {\n global.set(\"cFET\",undefined);\n global.set(\"setSwitchc\",undefined);\n msg.payload = Buffer.from([0x4E, 0x57, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x02, 0xab, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x01, 0xd3]);\n } else if (charge === true) {\n global.set(\"cFET\",undefined);\n global.set(\"setSwitchc\",undefined);\n msg.payload = Buffer.from([0x4E, 0x57, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x02, 0xab, 0x01, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x01, 0xd4]);\n } else if (discharge === false) {\n global.set(\"dcFET\",undefined);\n flow.set(\"setSwitchdc\",undefined);\n msg.payload = Buffer.from([0x4E, 0x57, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x02, 0xac, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x01, 0xd4]);\n } else if (discharge === true) {\n global.set(\"dcFET\",undefined);\n flow.set(\"setSwitchdc\",undefined);\n msg.payload = Buffer.from([0x4E, 0x57, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x02, 0xac, 0x01, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x01, 0xd5]);\n }\n flow.set(\"aButton\",true);\n} else { // To ask for all metrics\n msg.payload = Buffer.from([0x4E, 0x57, 0x00, 0x13, 0x00, 0x00, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x01, 0x29]);\n}\n\nreturn msg;\n","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":300,"y":400,"wires":[["54ceb40ed5bc25c9"]]},{"id":"7cc1206a5c710dfe","type":"function","z":"685c789c0e2cf1ba","name":"parse payload","func":"var aButton = flow.get(\"aButton\");\n\n\nif (!aButton) {\n // function to calculate checksum\n function chksum(buffer, len) {\n let checksum = 0;\n let ii;\n for (ii = 0; ii < len; ii++) {\n checksum = checksum + buffer[ii];\n }\n return checksum;\n }\n\n // function to calculate cells diff\n function maxAbsDiff(arr, n) {\n arr.sort(function (a, b) { return a - b });\n return arr[n - 1] - arr[0];\n }\n\n // verify the reply from BMS if it has the right header\n msg.error = null;\n msg.buffer = msg.payload;\n if (msg.buffer[0] != 0x4E || msg.buffer[1] != 0x57) {\n node.warn ('Invalid header');\n msg.error = \"BMS Error\";\n }\n\n // verify the reply from BMS if it has the right checksum\n msg.jkbms = {};\n msg.jkbms.data_len = msg.buffer[2] << 8 | msg.buffer[3] << 0;\n msg.jkbms.function = msg.buffer[8];\n msg.jkbms.computed_crc = chksum(msg.buffer, msg.jkbms.data_len);\n\n msg.jkbms.bmsreply_crc = msg.buffer[msg.jkbms.data_len] << 8 | msg.buffer[msg.jkbms.data_len + 1] << 0;\n\n if (msg.jkbms.computed_crc != msg.jkbms.bmsreply_crc) {\n node.warn('JkModbus CRC Check failed!');\n msg.error = \"BMS Error\";\n }\n\n //cell voltages\n const cells = [];\n let cell;\n msg.jkbms.numberOfCells = msg.buffer[12] / 3;\n msg.jkbms.cell_voltages = {};\n for (cell = 1; cell <= msg.jkbms.numberOfCells; cell++) {\n msg.jkbms.cell_voltages[\"cell\" + cell] = (msg.buffer[12 + cell * 3 - 1] << 8 | msg.buffer[12 + cell * 3] << 0) / 1000;\n cells[cell-1] = msg.jkbms.cell_voltages[\"cell\" + cell]\n }\n\n // cell diff voltage\n msg.jkbms.cell_diff = parseFloat(maxAbsDiff(cells, 4).toFixed(3));\n\n // cell min & max\n //msg.jkbms.cell_min = Math.min.apply(Math, cells).toFixed(3);\n msg.jkbms.cell_min = parseFloat(Math.min.apply(Math, cells).toFixed(3));\n //msg.jkbms.cell_max = Math.max.apply(Math, cells).toFixed(3);\n msg.jkbms.cell_max = parseFloat(Math.max.apply(Math, cells).toFixed(3));\n\n //temperatures\n msg.jkbms.temperatures = {};\n //if (msg.buffer[25] != 0x80) {\n // node.warn ('Temperatures marker not correct!');\n // msg.error = \"BMS Error\";\n //}\n msg.jkbms.temperatures.internal = msg.buffer[26] << 8 | msg.buffer[27] << 0;\n if (msg.jkbms.temperatures.internal > 100) {\n msg.jkbms.temperatures.internal = msg.jkbms.temperatures.internal - 100;\n }\n msg.jkbms.temperatures.battery1 = msg.buffer[29] << 8 | msg.buffer[30] << 0;\n if (msg.jkbms.temperatures.battery1 > 100) {\n msg.jkbms.temperatures.battery1 = msg.jkbms.temperatures.battery1 - 100;\n }\n msg.jkbms.temperatures.battery2 = msg.buffer[32] << 8 | msg.buffer[33] << 0;\n if (msg.jkbms.temperatures.battery2 > 100) {\n msg.jkbms.temperatures.battery2 = msg.jkbms.temperatures.battery2 - 100;\n }\n\n //battery voltage\n //if (msg.buffer[34] != 0x83) {\n // node.warn ('Voltage marker not correct!');\n // msg.error = \"BMS Error\";\n //}\n msg.jkbms.voltage = (msg.buffer[35] << 8 | msg.buffer[36] << 0) / 100;\n\n //battery current\n //if (msg.buffer[37] != 0x84) {\n // node.warn ('Current marker not correct!');\n // msg.error = \"BMS Error\";\n //}\n msg.jkbms.current = (msg.buffer[38] << 8 | msg.buffer[39] << 0);\n\n let currconst = 32768\n if (msg.jkbms.current < currconst)\n msg.jkbms.current = msg.jkbms.current / -100;\n else\n msg.jkbms.current = (msg.jkbms.current - currconst) / 100;\n\n //remainig battery SOC\n //if (msg.buffer[40] != 0x85) {\n // node.warn ('Remaining battery SOC marker not correct!');\n // msg.error = \"BMS Error\";\n //}\n msg.jkbms.remainingsoc = msg.buffer[41];\n\n //numberof NTC\n //if (msg.buffer[42] != 0x86) {\n // node.warn ('Number of NTC marker not correct!');\n // msg.error = \"BMS Error\";\n //}\n msg.jkbms.ntcnumber = msg.buffer[43];\n\n //numberof battery cycles\n //if (msg.buffer[44] != 0x87) {\n // node.warn ('Number of battery cycles marker not correct!');\n // msg.error = \"BMS Error\";\n //}\n msg.jkbms.batterycycles = (msg.buffer[45] << 8 | msg.buffer[46] << 0);\n\n //battery cycle capacity Ah\n //if (msg.buffer[47] != 0x89) {\n // node.warn ('Battery cycle capacity Ah marker not correct!');\n // msg.error = \"BMS Error\";\n //}\n msg.jkbms.batterycyclecapacity = (msg.buffer[48] << 24 | msg.buffer[49] << 16 | msg.buffer[50] << 8 | msg.buffer[51] << 0);\n\n //number of cells\n //if (msg.buffer[52] != 0x8a) {\n // node.warn ('Number of cells marker not correct!');\n // msg.error = \"BMS Error\";\n //}\n msg.jkbms.cellsnumber = (msg.buffer[53] << 8 | msg.buffer[54] << 0);\n\n // battery capacity setting\n //if (msg.buffer[143] != 0xaa) {\n // node.warn('Battery capacity marker not correct!');\n // msg.error = \"BMS Error\";\n //}\n msg.jkbms.batterycapacity = (msg.buffer[144] << 24 | msg.buffer[145] << 16 | msg.buffer[146] << 8 | msg.buffer[147] << 0);\n\n //battery warnings\n msg.jkbms.warnings = {};\n\n //if (msg.buffer[55] != 0x8b) {\n // node.warn ('Battery warnings marker not correct!');\n // msg.error = \"BMS Error\";\n //}\n msg.jkbms.warnings.batteryWarning = (msg.buffer[56] << 8 | msg.buffer[57] << 0);\n\n msg.jkbms.warnings.lowCapacity = msg.jkbms.warnings.batteryWarning & 1;\n msg.jkbms.warnings.powerTubeOvertemperature = (msg.jkbms.warnings.batteryWarning & 2) >> 1 ;\n msg.jkbms.warnings.chargingOvervoltage = (msg.jkbms.warnings.batteryWarning & 4) >> 2;\n msg.jkbms.warnings.dischargingUndervoltage = (msg.jkbms.warnings.batteryWarning & 8) >> 3;\n msg.jkbms.warnings.batteryOvertemperature = (msg.jkbms.warnings.batteryWarning & 16) >> 4;\n msg.jkbms.warnings.chargingOvercurrent = (msg.jkbms.warnings.batteryWarning & 32) >> 5;\n msg.jkbms.warnings.dischargingOvercurrent = (msg.jkbms.warnings.batteryWarning & 64) >> 6;\n msg.jkbms.warnings.cellPressureDifference = (msg.jkbms.warnings.batteryWarning & 128) >> 7;\n msg.jkbms.warnings.overtemperatureBatteryBox = (msg.jkbms.warnings.batteryWarning & 256) >> 8;\n msg.jkbms.warnings.batteryLowtemperature = (msg.jkbms.warnings.batteryWarning & 512) >> 9;\n msg.jkbms.warnings.cellOvervoltage = (msg.jkbms.warnings.batteryWarning & 1024) >> 10;\n msg.jkbms.warnings.cellUndervoltage = (msg.jkbms.warnings.batteryWarning & 2048) >> 11;\n msg.jkbms.warnings.alarm309_AProtection = (msg.jkbms.warnings.batteryWarning & 4096) >> 12;\n msg.jkbms.warnings.alarm309_BProtection = (msg.jkbms.warnings.batteryWarning & 8192) >> 13;\n\n //battery status\n msg.jkbms.status = {};\n\n //if (msg.buffer[58] != 0x8c) {\n // node.warn ('Battery warning marker not correct!');\n // msg.error = \"BMS Error\";\n //}\n msg.jkbms.status.batteryStatus = (msg.buffer[59] << 8 | msg.buffer[60] << 0);\n msg.jkbms.status.chargingEnabled = msg.jkbms.status.batteryStatus & 1;\n msg.jkbms.status.dischargingEnabled = (msg.jkbms.status.batteryStatus & 2) >> 1;\n msg.jkbms.status.balancingEnabled = (msg.jkbms.status.batteryStatus & 4) >> 2;\n msg.jkbms.status.emergencyConnect = (msg.jkbms.status.batteryStatus & 8) >> 3;\n\n return msg;\n} else {\n flow.set(\"aButton\",false);\n}","outputs":2,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":640,"y":400,"wires":[["84bfb52d67f4bf28","12e4edde830bc6f3","0c97ee74539b6669","db778a39935c4d74","e3a52250900b7bed","62a45c8b295c0a9e","205339e883fc1e5e","6c6c3287d2a23aa6","feeee4f0bdd494d4","5d3b84a86dbcbd01","fe2070fa347d519d","aab68497c3fe615a","aada405372b3c475","aa839b02fa3a1983","f7462e9ec0638043","81c2eedcbe5bf1e7","ea93b785a8dd3d1f","c9b6aef336ca4262","54629cf215624865","b394a10b3c7471f6"],[]]},{"id":"54ceb40ed5bc25c9","type":"serial request","z":"685c789c0e2cf1ba","name":"JK BMS","serial":"506e8274d411228d","x":460,"y":400,"wires":[["7cc1206a5c710dfe"]]},{"id":"84bfb52d67f4bf28","type":"function","z":"685c789c0e2cf1ba","name":"cell0","func":"msg.topic = \"electrical.batteries.house.LiFePO4.cell1.voltage\";\nmsg.payload = msg.jkbms.cell_voltages.cell1;\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":930,"y":40,"wires":[["8e51d2f6360a3f61"]]},{"id":"12e4edde830bc6f3","type":"function","z":"685c789c0e2cf1ba","name":"cell1","func":"msg.topic = \"electrical.batteries.house.LiFePO4.cell2.voltage\";\nmsg.payload = msg.jkbms.cell_voltages.cell2;\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":930,"y":80,"wires":[["8e51d2f6360a3f61"]]},{"id":"0c97ee74539b6669","type":"function","z":"685c789c0e2cf1ba","name":"cell2","func":"msg.topic = \"electrical.batteries.house.LiFePO4.cell3.voltage\";\nmsg.payload = msg.jkbms.cell_voltages.cell3;\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":930,"y":120,"wires":[["8e51d2f6360a3f61"]]},{"id":"db778a39935c4d74","type":"function","z":"685c789c0e2cf1ba","name":"cell3","func":"msg.topic = \"electrical.batteries.house.LiFePO4.cell4.voltage\";\nmsg.payload = msg.jkbms.cell_voltages.cell4;\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":930,"y":160,"wires":[["8e51d2f6360a3f61"]]},{"id":"e3a52250900b7bed","type":"function","z":"685c789c0e2cf1ba","name":"celldiff","func":"msg.topic = \"electrical.batteries.house.LiFePO4.cell-diff.voltage\";\nmsg.payload = msg.jkbms.cell_diff;\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":930,"y":200,"wires":[["06997059247e4353"]]},{"id":"62a45c8b295c0a9e","type":"function","z":"685c789c0e2cf1ba","name":"cellmax","func":"msg.topic = \"electrical.batteries.house.LiFePO4.cell-max.voltage\";\nmsg.payload = msg.jkbms.cell_max;\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":940,"y":280,"wires":[["44c09ed6a1e7569d"]]},{"id":"205339e883fc1e5e","type":"function","z":"685c789c0e2cf1ba","name":"cellmin","func":"msg.topic = \"electrical.batteries.house.LiFePO4.cell-min.voltage\";\nmsg.payload = msg.jkbms.cell_min;\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":940,"y":240,"wires":[["bd3368baa8eadd12"]]},{"id":"6c6c3287d2a23aa6","type":"function","z":"685c789c0e2cf1ba","name":"voltage","func":"msg.topic = \"electrical.batteries.house.LiFePO4.voltage\";\nmsg.payload = msg.jkbms.voltage;\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":940,"y":320,"wires":[["8e51d2f6360a3f61"]]},{"id":"feeee4f0bdd494d4","type":"function","z":"685c789c0e2cf1ba","name":"current","func":"msg.topic = \"electrical.batteries.house.LiFePO4.current\";\nmsg.payload = msg.jkbms.current;\nreturn msg;\n","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":940,"y":360,"wires":[["8e51d2f6360a3f61"]]},{"id":"5d3b84a86dbcbd01","type":"function","z":"685c789c0e2cf1ba","name":"probes","func":"msg.topic = \"electrical.batteries.house.LiFePO4.probes\";\nmsg.payload = msg.jkbms.ntcnumber + 1;\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":930,"y":400,"wires":[[]]},{"id":"fe2070fa347d519d","type":"function","z":"685c789c0e2cf1ba","name":"temp0","func":"msg.topic = \"electrical.batteries.house.LiFePO4.bms.temperature\";\nmsg.payload = msg.jkbms.temperatures.internal;\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":930,"y":440,"wires":[["8e51d2f6360a3f61"]]},{"id":"aab68497c3fe615a","type":"function","z":"685c789c0e2cf1ba","name":"temp1","func":"msg.topic = \"electrical.batteries.house.LiFePO4.probe1.temperature\";\nmsg.payload = msg.jkbms.temperatures.battery1;\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":930,"y":480,"wires":[["8e51d2f6360a3f61"]]},{"id":"aada405372b3c475","type":"function","z":"685c789c0e2cf1ba","name":"temp2","func":"msg.topic = \"electrical.batteries.house.LiFePO4.probe2.temperature\";\nmsg.payload = msg.jkbms.temperatures.battery2;\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":930,"y":520,"wires":[["8e51d2f6360a3f61"]]},{"id":"aa839b02fa3a1983","type":"function","z":"685c789c0e2cf1ba","name":"cyclecnt","func":"msg.topic = \"electrical.batteries.house.LiFePO4.cyclecount\";\nmsg.payload = msg.jkbms.batterycycles;\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":940,"y":560,"wires":[[]]},{"id":"f7462e9ec0638043","type":"function","z":"685c789c0e2cf1ba","name":"soc","func":"msg.topic = \"electrical.batteries.house.LiFePO4.soc\";\nmsg.payload = msg.jkbms.remainingsoc;\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":930,"y":600,"wires":[["8e51d2f6360a3f61"]]},{"id":"81c2eedcbe5bf1e7","type":"function","z":"685c789c0e2cf1ba","name":"remaining Ah","func":"msg.topic = \"electrical.batteries.house.LiFePO4.remaining-ah\";\nmsg.payload = msg.jkbms.batterycapacity * msg.jkbms.remainingsoc / 100;\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":950,"y":640,"wires":[["8e51d2f6360a3f61"]]},{"id":"ea93b785a8dd3d1f","type":"function","z":"685c789c0e2cf1ba","name":"dischargeFET","func":"// Omdat KIP als boolean geen \"0\" en \"1\" snapt\n// wordt dat hier omgezet in false en true.\n\nmsg.topic = \"electrical.batteries.house.LiFePO4.allow2discharge\";\nvar check = msg.jkbms.status.dischargingEnabled;\n\nif (check === 0) {\n msg.payload = false;\n}\n\nif (check === 1) {\n msg.payload = true;\n}\n\nreturn msg;\n","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":960,"y":720,"wires":[["99adf496d9f55a1b"]]},{"id":"c9b6aef336ca4262","type":"function","z":"685c789c0e2cf1ba","name":"Balancer","func":"// Omdat KIP als boolean geen \"0\" en \"1\" snapt\n// wordt dat hier omgezet in false en true.\n\nmsg.topic = \"electrical.batteries.house.LiFePO4.balancing\";\nvar check = msg.jkbms.status.balancingEnabled;\n\nif (check == 0) {\n msg.payload = false;\n}\n\nif (check == 1) {\n msg.payload = true;\n}\n\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":940,"y":760,"wires":[["734b2719c2831b07"]]},{"id":"54629cf215624865","type":"change","z":"685c789c0e2cf1ba","name":"stderr","rules":[{"t":"set","p":"payload","pt":"msg","to":"error","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":930,"y":800,"wires":[["3442bd7e2ffe4c35"]]},{"id":"8e51d2f6360a3f61","type":"signalk-send-pathvalue","z":"685c789c0e2cf1ba","name":"","source":"","meta":"{\"topic\":\"\",\"payload\":\"\"}","x":1610,"y":240,"wires":[]},{"id":"3442bd7e2ffe4c35","type":"debug","z":"685c789c0e2cf1ba","name":"STDERR","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1120,"y":800,"wires":[]},{"id":"b394a10b3c7471f6","type":"function","z":"685c789c0e2cf1ba","name":"chargeFET","func":"// Omdat KIP als boolean geen \"0\" en \"1\" snapt\n// wordt dat hier omgezet in false en true.\n\nmsg.topic = \"electrical.batteries.house.LiFePO4.allow2charge\";\nvar check = msg.jkbms.status.chargingEnabled;\n\nif (check === 0) {\n msg.payload = false;\n}\n\nif (check === 1) {\n msg.payload = true;\n}\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":950,"y":680,"wires":[["4a48b0020aea8136"]]},{"id":"e9cdee72979e8557","type":"inject","z":"685c789c0e2cf1ba","name":"On","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"true","payloadType":"bool","x":110,"y":480,"wires":[["3fe926d8f036d8ef"]]},{"id":"3fe926d8f036d8ef","type":"function","z":"685c789c0e2cf1ba","name":"cFETvar","func":"if (msg.payload === false) {\n global.set(\"cFET\",false);\n}\n\nif (msg.payload === true) {\n global.set(\"cFET\",true);\n}\n\nglobal.set(\"setSwitchc\",true);\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":300,"y":520,"wires":[[]]},{"id":"265a98ef26e2b400","type":"signalk-put-handler","z":"685c789c0e2cf1ba","name":"'PUT' van KIP","path":"electrical.batteries.house.LiFePO4.allow2charge","x":130,"y":560,"wires":[["3fe926d8f036d8ef"]]},{"id":"4f4f42994c533f0a","type":"inject","z":"685c789c0e2cf1ba","name":"Off","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"false","payloadType":"bool","x":110,"y":520,"wires":[["3fe926d8f036d8ef"]]},{"id":"9a29cd2c585ad57a","type":"inject","z":"685c789c0e2cf1ba","name":"On","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"true","payloadType":"bool","x":110,"y":620,"wires":[["8b93665f50fae100"]]},{"id":"8b93665f50fae100","type":"function","z":"685c789c0e2cf1ba","name":"dcFETvar","func":"if (msg.payload === false) {\n global.set(\"dcFET\",false);\n}\n\nif (msg.payload === true) {\n global.set(\"dcFET\",true);\n}\n\nflow.set(\"setSwitchdc\",true);\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":300,"y":660,"wires":[[]]},{"id":"59f683ca538b78a9","type":"signalk-put-handler","z":"685c789c0e2cf1ba","name":"'PUT' van KIP","path":"electrical.batteries.house.LiFePO4.allow2discharge","x":130,"y":700,"wires":[["8b93665f50fae100"]]},{"id":"61e4cdadda4d87a4","type":"inject","z":"685c789c0e2cf1ba","name":"Off","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"false","payloadType":"bool","x":110,"y":660,"wires":[["8b93665f50fae100"]]},{"id":"5cd5e1d70af9a65a","type":"inject","z":"685c789c0e2cf1ba","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":120,"y":360,"wires":[["ecbfe3cc2470266e"]]},{"id":"44c09ed6a1e7569d","type":"rbe","z":"685c789c0e2cf1ba","name":"changed","func":"rbe","gap":"","start":"","inout":"out","septopics":false,"property":"payload","topi":"topic","x":1080,"y":280,"wires":[["8e51d2f6360a3f61"]]},{"id":"bd3368baa8eadd12","type":"rbe","z":"685c789c0e2cf1ba","name":"changed","func":"rbe","gap":"","start":"","inout":"out","septopics":false,"property":"payload","topi":"topic","x":1080,"y":240,"wires":[["8e51d2f6360a3f61"]]},{"id":"06997059247e4353","type":"rbe","z":"685c789c0e2cf1ba","name":"changed","func":"rbe","gap":"","start":"","inout":"out","septopics":false,"property":"payload","topi":"topic","x":1080,"y":200,"wires":[["8e51d2f6360a3f61"]]},{"id":"4a48b0020aea8136","type":"rbe","z":"685c789c0e2cf1ba","name":"Changed","func":"rbe","gap":"","start":"","inout":"out","septopics":true,"property":"payload","topi":"topic","x":1120,"y":680,"wires":[["8e51d2f6360a3f61"]]},{"id":"99adf496d9f55a1b","type":"rbe","z":"685c789c0e2cf1ba","name":"Changed","func":"rbe","gap":"","start":"","inout":"out","septopics":true,"property":"payload","topi":"topic","x":1120,"y":720,"wires":[["8e51d2f6360a3f61"]]},{"id":"734b2719c2831b07","type":"rbe","z":"685c789c0e2cf1ba","name":"Changed","func":"rbe","gap":"","start":"","inout":"out","septopics":true,"property":"payload","topi":"topic","x":1120,"y":760,"wires":[["8e51d2f6360a3f61"]]},{"id":"506e8274d411228d","type":"serial-port","name":"USB-0","serialport":"/dev/ttyUSB0","serialbaud":"115200","databits":"8","parity":"none","stopbits":"1","waitfor":"","dtr":"none","rts":"none","cts":"none","dsr":"none","newline":"500","bin":"bin","out":"time","addchar":"","responsetimeout":"10"}]