Innovenergy_trunk/NodeRed/flows.json

5660 lines
159 KiB
JSON

[
{
"id": "e2588b9d824334f7",
"type": "tab",
"label": "controller_calibration_charge",
"disabled": false,
"info": "",
"env": []
},
{
"id": "322b256f0daf33ef",
"type": "tab",
"label": "controller_hold_min_soc&&charge_to_min_soc",
"disabled": false,
"info": "",
"env": []
},
{
"id": "32b2f9d4415d82ce",
"type": "tab",
"label": "controller_max_discharge",
"disabled": false,
"info": "",
"env": []
},
{
"id": "812b3c1b3d3fa76b",
"type": "tab",
"label": "parse_warnings_and_alarms",
"disabled": false,
"info": "",
"env": []
},
{
"id": "dd75eef8547a776f",
"type": "tab",
"label": "Node Red Dashboard",
"disabled": false,
"info": "",
"env": []
},
{
"id": "victron-client-id",
"type": "victron-client"
},
{
"id": "e177392401620838",
"type": "ui_group",
"name": "Controller and Battery Info",
"tab": "157862d37ae585b5",
"order": 2,
"disp": true,
"width": "13",
"collapse": false,
"className": ""
},
{
"id": "157862d37ae585b5",
"type": "ui_tab",
"name": "Home",
"icon": "check",
"disabled": false,
"hidden": false
},
{
"id": "e0e675d533a148b7",
"type": "ui_base",
"theme": {
"name": "theme-light",
"lightTheme": {
"default": "#0094CE",
"baseColor": "#0094CE",
"baseFont": "-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif",
"edited": true,
"reset": false
},
"darkTheme": {
"default": "#097479",
"baseColor": "#097479",
"baseFont": "-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif",
"edited": false
},
"customTheme": {
"name": "Untitled Theme 1",
"default": "#4B7930",
"baseColor": "#4B7930",
"baseFont": "-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif",
"reset": false
},
"themeState": {
"base-color": {
"default": "#0094CE",
"value": "#0094CE",
"edited": false
},
"page-titlebar-backgroundColor": {
"value": "#0094CE",
"edited": false
},
"page-backgroundColor": {
"value": "#fafafa",
"edited": false
},
"page-sidebar-backgroundColor": {
"value": "#ffffff",
"edited": false
},
"group-textColor": {
"value": "#1bbfff",
"edited": false
},
"group-borderColor": {
"value": "#ffffff",
"edited": false
},
"group-backgroundColor": {
"value": "#ffffff",
"edited": false
},
"widget-textColor": {
"value": "#111111",
"edited": false
},
"widget-backgroundColor": {
"value": "#0094ce",
"edited": false
},
"widget-borderColor": {
"value": "#ffffff",
"edited": false
},
"base-font": {
"value": "-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif"
}
},
"angularTheme": {
"primary": "indigo",
"accents": "blue",
"warn": "red",
"background": "grey",
"palette": "light"
}
},
"site": {
"name": "Node-RED Dashboard",
"hideToolbar": "false",
"allowSwipe": "false",
"lockMenu": "false",
"allowTempTheme": "true",
"dateFormat": "DD/MM/YYYY",
"sizes": {
"sx": 48,
"sy": 48,
"gx": 6,
"gy": 6,
"cx": 6,
"cy": 6,
"px": 0,
"py": 0
}
}
},
{
"id": "3290bd5996bd3175",
"type": "ui_group",
"name": "Easy Input",
"tab": "157862d37ae585b5",
"order": 3,
"disp": true,
"width": 13,
"collapse": false,
"className": ""
},
{
"id": "d610b26df84f336e",
"type": "ui_group",
"name": "Calibration Charge",
"tab": "157862d37ae585b5",
"order": 1,
"disp": true,
"width": "13",
"collapse": false,
"className": ""
},
{
"id": "1c76b68292d58d7a",
"type": "victron-input-custom",
"z": "e2588b9d824334f7",
"service": "com.victronenergy.battery/1",
"path": "/TimeToTOCRequest",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/TimeToTOCRequest",
"name": "/TimeToTOCRequest",
"type": "number"
},
"name": "",
"onlyChanges": false,
"x": 580,
"y": 280,
"wires": [
[
"b18eaae1b2cf532a"
]
]
},
{
"id": "374a9784b13e6b91",
"type": "ui_switch",
"z": "e2588b9d824334f7",
"name": "Start Calibration Charge Now",
"label": "Start Calibration Charge Now",
"tooltip": "",
"group": "d610b26df84f336e",
"order": 5,
"width": 0,
"height": 0,
"passthru": true,
"decouple": "false",
"topic": "#:(file)::start_calibration_charge_now_button",
"topicType": "global",
"style": "",
"onvalue": "true",
"onvalueType": "bool",
"onicon": "",
"oncolor": "",
"offvalue": "false",
"offvalueType": "bool",
"officon": "",
"offcolor": "",
"animate": false,
"className": "",
"x": 2440,
"y": 100,
"wires": [
[
"0eda66dbeeaa1361",
"ff621c398de790e9"
]
]
},
{
"id": "0eda66dbeeaa1361",
"type": "switch",
"z": "e2588b9d824334f7",
"name": "Button is on",
"property": "payload",
"propertyType": "msg",
"rules": [
{
"t": "true"
}
],
"checkall": "true",
"repair": false,
"outputs": 1,
"x": 2670,
"y": 100,
"wires": [
[
"38a3f85186c86064"
]
]
},
{
"id": "e6c8eb42a10e21a3",
"type": "switch",
"z": "e2588b9d824334f7",
"name": "Need to do calibration charge or not",
"property": "payload",
"propertyType": "msg",
"rules": [
{
"t": "eq",
"v": "0",
"vt": "num"
},
{
"t": "eq",
"v": "1",
"vt": "num"
},
{
"t": "else"
}
],
"checkall": "true",
"repair": false,
"outputs": 3,
"x": 1620,
"y": 240,
"wires": [
[
"a0d686b515f76cae",
"65fc8a93c348bd1e",
"7404973d10f3a10a",
"644fe572f173602e"
],
[
"e3e9b1f4b7cabc16",
"8678a63acdb5ee29",
"985f0a278ffd922c"
],
[
"0eda2d25df727b9a",
"ce4254f159092244"
]
]
},
{
"id": "3ff4ceaaebe9defb",
"type": "ui_text",
"z": "e2588b9d824334f7",
"group": "d610b26df84f336e",
"order": 2,
"width": 0,
"height": 0,
"name": "Time To Calibration Charge",
"label": "Time To Calibration Charge",
"format": "{{msg.payload}}",
"layout": "row-spread",
"className": "",
"style": false,
"font": "",
"fontSize": 16,
"color": "#000000",
"x": 3360,
"y": 420,
"wires": []
},
{
"id": "0b6f77eecb110736",
"type": "ui_text_input",
"z": "e2588b9d824334f7",
"name": "Calibration Charge Start Time (hh:mm)",
"label": "Calibration Charge Start Time (hh:mm:ss.sss)",
"tooltip": "",
"group": "d610b26df84f336e",
"order": 4,
"width": 0,
"height": 0,
"passthru": true,
"mode": "time",
"delay": "0",
"topic": "#:(file)::calibration_charge_start_time",
"sendOnBlur": false,
"className": "",
"topicType": "global",
"x": 510,
"y": 80,
"wires": [
[
"f32edc8e22e6c4a6"
]
]
},
{
"id": "ff621c398de790e9",
"type": "change",
"z": "e2588b9d824334f7",
"name": "",
"rules": [
{
"t": "set",
"p": "#:(file)::start_calibration_charge_now_button",
"pt": "global",
"to": "payload",
"tot": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 2780,
"y": 40,
"wires": [
[
"8cd49df4ce393b99"
]
]
},
{
"id": "8cd49df4ce393b99",
"type": "debug",
"z": "e2588b9d824334f7",
"name": "Debug for calibration button",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": true,
"complete": "payload",
"targetType": "msg",
"statusVal": "payload",
"statusType": "auto",
"x": 3180,
"y": 40,
"wires": []
},
{
"id": "f32edc8e22e6c4a6",
"type": "change",
"z": "e2588b9d824334f7",
"name": "",
"rules": [
{
"t": "set",
"p": "#:(file)::calibration_charge_start_time",
"pt": "global",
"to": "payload",
"tot": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 900,
"y": 80,
"wires": [
[
"c2e5b1ab69e8b817"
]
]
},
{
"id": "38a3f85186c86064",
"type": "change",
"z": "e2588b9d824334f7",
"name": "Set \"Calibration charge now\" to Time To CalibrationCharge",
"rules": [
{
"t": "set",
"p": "payload",
"pt": "msg",
"to": "Calibration charge now",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 3010,
"y": 100,
"wires": [
[
"3ff4ceaaebe9defb"
]
]
},
{
"id": "28b4fe5478e59dcc",
"type": "victron-input-custom",
"z": "e2588b9d824334f7",
"service": "com.victronenergy.settings",
"path": "/Settings/Controller/LastEOC",
"serviceObj": {
"service": "com.victronenergy.settings",
"name": "com.victronenergy.settings"
},
"pathObj": {
"path": "/Settings/Controller/LastEOC",
"name": "/Settings/Controller/LastEOC",
"type": "number"
},
"name": "",
"onlyChanges": false,
"x": 530,
"y": 360,
"wires": [
[
"c08993a9535559b7",
"5909342727c04466"
]
]
},
{
"id": "7404973d10f3a10a",
"type": "change",
"z": "e2588b9d824334f7",
"name": "Get current timestamp to update LastEoc",
"rules": [
{
"t": "set",
"p": "payload",
"pt": "msg",
"to": "",
"tot": "date"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 2140,
"y": 200,
"wires": [
[
"466d0ead739c355d"
]
]
},
{
"id": "f0b91188bb162f98",
"type": "victron-output-custom",
"z": "e2588b9d824334f7",
"service": "com.victronenergy.settings",
"path": "/Settings/Controller/LastEOC",
"serviceObj": {
"service": "com.victronenergy.settings",
"name": "com.victronenergy.settings"
},
"pathObj": {
"path": "/Settings/Controller/LastEOC",
"name": "/Settings/Controller/LastEOC",
"type": "number"
},
"name": "",
"onlyChanges": false,
"x": 2790,
"y": 200,
"wires": []
},
{
"id": "466d0ead739c355d",
"type": "function",
"z": "e2588b9d824334f7",
"name": "Millisecond_to_second",
"func": "current_timestamp_in_second=Math.floor(msg.payload/1000);\nmsg.payload = current_timestamp_in_second;\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 2440,
"y": 200,
"wires": [
[
"f0b91188bb162f98"
]
]
},
{
"id": "7339dc97983bb77b",
"type": "comment",
"z": "e2588b9d824334f7",
"name": "EOC reached ",
"info": "",
"x": 1890,
"y": 220,
"wires": []
},
{
"id": "0fff2085b1eb8dcb",
"type": "comment",
"z": "e2588b9d824334f7",
"name": "Do calibration charge now",
"info": "",
"x": 2230,
"y": 400,
"wires": []
},
{
"id": "ed2bb3eadfa27747",
"type": "comment",
"z": "e2588b9d824334f7",
"name": "Still some time left to do calibration charge",
"info": "",
"x": 2160,
"y": 480,
"wires": []
},
{
"id": "615bdf17da1a6422",
"type": "debug",
"z": "e2588b9d824334f7",
"name": "Debug for calibration charge function",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": true,
"complete": "payload",
"targetType": "msg",
"statusVal": "payload.count",
"statusType": "auto",
"x": 1630,
"y": 140,
"wires": []
},
{
"id": "8678a63acdb5ee29",
"type": "victron-output-custom",
"z": "e2588b9d824334f7",
"service": "com.victronenergy.hub4/0",
"path": "/Overrides/ForceCharge",
"serviceObj": {
"service": "com.victronenergy.hub4/0",
"name": "com.victronenergy.hub4 (0)"
},
"pathObj": {
"path": "/Overrides/ForceCharge",
"name": "/Overrides/ForceCharge",
"type": "number"
},
"name": "",
"onlyChanges": false,
"x": 2620,
"y": 460,
"wires": []
},
{
"id": "65fc8a93c348bd1e",
"type": "change",
"z": "e2588b9d824334f7",
"name": "EOC reached",
"rules": [
{
"t": "set",
"p": "payload",
"pt": "msg",
"to": "EOC reached",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 2060,
"y": 240,
"wires": [
[
"3ff4ceaaebe9defb"
]
]
},
{
"id": "e3e9b1f4b7cabc16",
"type": "change",
"z": "e2588b9d824334f7",
"name": "Calibration charge now",
"rules": [
{
"t": "set",
"p": "payload",
"pt": "msg",
"to": "Calibration charge now",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 2520,
"y": 420,
"wires": [
[
"3ff4ceaaebe9defb"
]
]
},
{
"id": "b077a48ff0831b2a",
"type": "ui_dropdown",
"z": "e2588b9d824334f7",
"name": "Calibration Charge Day",
"label": "Calibration Charge Day",
"tooltip": "",
"place": "",
"group": "d610b26df84f336e",
"order": 3,
"width": 0,
"height": 0,
"passthru": true,
"multiple": false,
"options": [
{
"label": "Sunday",
"value": 0,
"type": "num"
},
{
"label": "Monday",
"value": 1,
"type": "num"
},
{
"label": "Tuesday",
"value": 2,
"type": "num"
},
{
"label": "Wednesday",
"value": 3,
"type": "num"
},
{
"label": "Thursday",
"value": 4,
"type": "num"
},
{
"label": "Friday",
"value": 5,
"type": "num"
},
{
"label": "Saturday",
"value": 6,
"type": "num"
}
],
"payload": "",
"topic": "#:(file)::calibration_charge_weekday",
"topicType": "global",
"className": "",
"x": 510,
"y": 180,
"wires": [
[
"10605f48b99030d0"
]
]
},
{
"id": "10605f48b99030d0",
"type": "change",
"z": "e2588b9d824334f7",
"name": "",
"rules": [
{
"t": "set",
"p": "#:(file)::calibration_charge_start_weekday",
"pt": "global",
"to": "payload",
"tot": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 890,
"y": 180,
"wires": [
[
"c2e5b1ab69e8b817"
]
]
},
{
"id": "b18eaae1b2cf532a",
"type": "change",
"z": "e2588b9d824334f7",
"name": "",
"rules": [
{
"t": "set",
"p": "#:(file)::TimeToTOC",
"pt": "global",
"to": "payload",
"tot": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 960,
"y": 280,
"wires": [
[
"c2e5b1ab69e8b817"
]
]
},
{
"id": "c08993a9535559b7",
"type": "debug",
"z": "e2588b9d824334f7",
"name": "Debug for LastEOC",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 1010,
"y": 440,
"wires": []
},
{
"id": "6a3d4d1cb2651151",
"type": "inject",
"z": "e2588b9d824334f7",
"name": "",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": true,
"onceDelay": 0.1,
"topic": "",
"payload": "#:(file)::calibration_charge_start_time",
"payloadType": "global",
"x": 150,
"y": 80,
"wires": [
[
"0b6f77eecb110736"
]
]
},
{
"id": "fdd85619255f4e81",
"type": "inject",
"z": "e2588b9d824334f7",
"name": "",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": true,
"onceDelay": 0.1,
"topic": "",
"payload": "#:(file)::calibration_charge_start_weekday",
"payloadType": "global",
"x": 160,
"y": 180,
"wires": [
[
"b077a48ff0831b2a"
]
]
},
{
"id": "761a8f1f11727873",
"type": "inject",
"z": "e2588b9d824334f7",
"name": "",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "5",
"crontab": "",
"once": true,
"onceDelay": "0",
"topic": "",
"payload": "#:(file)::start_calibration_charge_now_button",
"payloadType": "global",
"x": 2030,
"y": 80,
"wires": [
[
"374a9784b13e6b91"
]
]
},
{
"id": "c2e5b1ab69e8b817",
"type": "function",
"z": "e2588b9d824334f7",
"name": "Cal time left to do calibration charge",
"func": "// Get minutes per day\nvar minutes_per_day = 1440;\n\n// Battery setting\nmax_day_wihthout_EOC = 7;\nmax_minutes_without_EOC = max_day_wihthout_EOC*minutes_per_day;\n\n// Get TimeToTOC which stores minutes from last EOC reached\ntime_to_TOC=global.get('TimeToTOC','file');\n\nif (time_to_TOC ==0){//EOC reahced\n msg.payload=0;\n return msg;\n}\n\n// Get calibration charge time (hh:mm) from user setting\nif(global.get('calibration_charge_start_time','file')!= null){\n minutes_from_midnight_calibration_charge = Math.floor(global.get('calibration_charge_start_time','file'));\n}else{\n minutes_from_midnight_calibration_charge = 0;//default value from midnight\n}\n\n// Get calibration charge weekday from user setting\nif(global.get('calibration_charge_start_weekday','file')!=null){\n weekday_calibration_charge = global.get('calibration_charge_start_weekday','file');\n}else{\n weekday_calibration_charge = 0;//default value from Sunday\n}\n\nfunction nextScheduleDay(adate, w) {\n var daysToAdd = (w - adate.getDay() + 7) % 7;\n var nextDate = new Date(adate);\n nextDate.setDate(adate.getDate() + daysToAdd);\n nextDate.setHours(0);\n nextDate.setMinutes(0);\n nextDate.setSeconds(0);\n return nextDate;\n}\n\n\nfunction chargeWindows(currentTime, weekday, starttime, timeToTOC) {\n var d1 = nextScheduleDay(currentTime, weekday);\n\n // Convert starttime to a Date object\n var startTime = new Date(starttime);\n\n // Calculate the next ScheduleDay considering if the sum of timeToTOC and timeLeftMinutes is less than 7 days\n var timeLeftMinutes = Math.ceil((d1.getTime() - currentTime.getTime() + starttime) / (1000 * 60));\n\n if (timeToTOC + timeLeftMinutes < max_minutes_without_EOC) {\n // If the sum is less than 7 days, push next ScheduleDay to next week\n d1.setDate(d1.getDate() + 7);\n }\n\n var startDateTimeD1 = new Date(d1);\n startDateTimeD1.setHours(startTime.getUTCHours(), startTime.getUTCMinutes(), 0, 0);\n\n // Check if current time is within the charge window\n if (currentTime < startDateTimeD1) {\n // Calculate time left until the end of the window\n var timeLeftMillis = startDateTimeD1 - currentTime;\n var daysLeft = Math.floor(timeLeftMillis / (1000 * 60 * 60 * 24));\n var hoursLeft = Math.floor((timeLeftMillis % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));\n var minutesLeft = Math.ceil((timeLeftMillis % (1000 * 60 * 60)) / (1000 * 60));\n \n days_str = (daysLeft > 0) ? (daysLeft + \"d\") : \"\";\n hours_str = (hoursLeft > 0) ? (hoursLeft + \"h\") : \"\";\n minutes_str = (minutesLeft > 0) ? (minutesLeft + \"m\") : \"\";\n \n time_to_calibration_str = days_str+hours_str+minutes_str;\n\n return time_to_calibration_str;\n } else {\n return 1;\n }\n}\n\nvar today = new Date(); // Assuming today's date\nvar timeLeft = chargeWindows(today, weekday_calibration_charge, minutes_from_midnight_calibration_charge, time_to_TOC);\n\nmsg.payload = timeLeft;\nreturn msg;",
"outputs": 1,
"timeout": "",
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 1280,
"y": 200,
"wires": [
[
"615bdf17da1a6422",
"e6c8eb42a10e21a3"
]
]
},
{
"id": "a0d686b515f76cae",
"type": "function",
"z": "e2588b9d824334f7",
"name": "Turn off calibration charge now button when EOC",
"func": "if(global.get('start_calibration_charge_now_button','file')==true)\n{\n msg.payload = false;\n}else{\n msg.payload = false;\n}\n\nreturn msg;\n\n",
"outputs": 1,
"timeout": "",
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 2090,
"y": 140,
"wires": [
[
"374a9784b13e6b91"
]
]
},
{
"id": "0eda2d25df727b9a",
"type": "function",
"z": "e2588b9d824334f7",
"name": "Check whether the calibration charge now button is on",
"func": "if(global.get('start_calibration_charge_now_button','file')==true)\n{\n text= \"Calibration charge now\";\n}else{\n text = msg.payload;\n}\nmsg.payload = text;\n\nreturn msg;\n",
"outputs": 1,
"timeout": 0,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 2620,
"y": 560,
"wires": [
[
"3ff4ceaaebe9defb"
]
]
},
{
"id": "5909342727c04466",
"type": "change",
"z": "e2588b9d824334f7",
"name": "LastEOC",
"rules": [
{
"t": "set",
"p": "#:(file)::LastEOC",
"pt": "global",
"to": "payload",
"tot": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 1000,
"y": 360,
"wires": [
[
"c2e5b1ab69e8b817"
]
]
},
{
"id": "44264437fe17f23f",
"type": "function",
"z": "e2588b9d824334f7",
"name": "Cal time left to do calibration charge_backup1",
"func": "// Get minutes per day\nvar minutes_per_day = 1440;\n\n// Battery setting\nmax_day_wihthout_EOC = 7;\nmax_minutes_without_EOC = max_day_wihthout_EOC*minutes_per_day;\n\n// Get TimeToTOC which stores minutes from last EOC reached\ntime_to_TOC=global.get('TimeToTOC','file');\n//time_to_TOC=global.get('TimeToTOC');\n\nif (time_to_TOC ==0){//EOC reahced\n msg.payload=0;\n return msg;\n}\n\n// Get calibration charge time (hh:mm) from user setting\nif(global.get('calibration_charge_start_time','file')!= null){\n minutes_from_midnight_calibration_charge = Math.floor(global.get('calibration_charge_start_time','file')/1000/60);\n}else{\n minutes_from_midnight_calibration_charge = 0;//default value from midnight\n}\n\n// Get calibration charge weekday from user setting\nif(global.get('calibration_charge_start_weekday','file')!=null){\n weekday_calibration_charge = global.get('calibration_charge_start_weekday','file');\n}else{\n weekday_calibration_charge = 0;//default value from Sunday\n}\n\n// Get today's date\nvar today = new Date();\n\n// Find the current day of the week (0 = Sunday, 1 = Monday, ..., 6 = Saturday)\nvar currentDay = today.getDay();\nvar minutes_from_today_midnight = today.getHours()*60+today.getMinutes();\n\n// Calculate the number of days and minutes until next calibration weekday\nvar weekday_diff = weekday_calibration_charge - currentDay;\nvar minutes_diff = minutes_from_midnight_calibration_charge - minutes_from_today_midnight;\n\nif (weekday_diff < 0) {\n weekday_diff += 7; \n}\n\nif(weekday_diff==0 && minutes_diff<0){\n weekday_diff += 7;\n}\n\n// Calculate time difference in minutes from now to the set calibration charge time\nminutes_diff_all_from_now_to_calibration=weekday_diff*minutes_per_day+minutes_diff;\n\n// Calculate time difference in minutes from LastEOC to the set calibration charge time\nminutes_diff_all_from_LastEOC_to_calibration = time_to_TOC+ minutes_diff_all_from_now_to_calibration;\n\n// Set the time to next calibration time\nvar nextCalibrationDate = new Date(today);\nvar_setHours = Math.floor(minutes_from_midnight_calibration_charge/60);\nvar_setMinutes = minutes_from_midnight_calibration_charge - var_setHours*60;\n\nif(minutes_diff_all_from_LastEOC_to_calibration<max_minutes_without_EOC){\n weekday_diff += 7;\n}\n\nnextCalibrationDate.setDate(today.getDate() + weekday_diff);\nnextCalibrationDate.setHours(var_setHours);\nnextCalibrationDate.setMinutes(var_setMinutes);\nnextCalibrationDate.setSeconds(0);\n\nnextCalibrationDateTimestamp = nextCalibrationDate.getTime();\n//lastEOCTimestamp = global.get('LastEOC','file');\nlastEOCTimestamp = global.get('LastEOC','file');\nminutes_fromLastEOCtoNextCalibrationTimestamp = Math.floor((nextCalibrationDateTimestamp/1000-lastEOCTimestamp)/60);\n\nif(time_to_TOC>=minutes_fromLastEOCtoNextCalibrationTimestamp){// need to do first time calibration charge;if the calibration setting is too close to last EOC time, then skip the first time and do it next week\n msg.payload =1;\n return msg;\n}else{\n time_left_minutes_all = minutes_diff_all_from_now_to_calibration;\n time_left_days = Math.floor(time_left_minutes_all/60/24);\n time_left_days_display = time_left_days + (minutes_diff_all_from_LastEOC_to_calibration<max_minutes_without_EOC?7:0);\n time_left_hours = Math.floor((time_left_minutes_all-time_left_days*24*60)/60);\n time_left_minutes = Math.floor(time_left_minutes_all-time_left_days*24*60-time_left_hours*60);\n \n days_str = (time_left_days_display > 0) ? (time_left_days_display + \"d\") : \"\";\n hours_str = (time_left_hours > 0) ? (time_left_hours + \"h\") : \"\";\n minutes_str = (time_left_minutes > 0) ? (time_left_minutes + \"m\") : \"\";\n \n time_to_calibration_str = days_str+hours_str+minutes_str;\n msg.payload=time_to_calibration_str;\n}\n\nreturn msg;",
"outputs": 1,
"timeout": "",
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 600,
"y": 560,
"wires": [
[]
]
},
{
"id": "011bad015cb995db",
"type": "function",
"z": "e2588b9d824334f7",
"name": "Cal time left to do calibration charge_backup2",
"func": "// Get minutes per day\nvar minutes_per_day = 1440;\n\n// Battery setting\nmax_day_wihthout_EOC = 7;\nmax_minutes_without_EOC = max_day_wihthout_EOC*minutes_per_day;\n\n// Get TimeToTOC which stores minutes from last EOC reached\ntime_to_TOC=global.get('TimeToTOC','file');\n\nif (time_to_TOC ==0){//EOC reahced\n msg.payload=0;\n return msg;\n}\n\n// Get calibration charge time (hh:mm) from user setting\nif(global.get('calibration_charge_start_time','file')!= null){\n minutes_from_midnight_calibration_charge = Math.floor(global.get('calibration_charge_start_time','file'));\n}else{\n minutes_from_midnight_calibration_charge = 0;//default value from midnight\n}\n\n// Get calibration charge weekday from user setting\nif(global.get('calibration_charge_start_weekday','file')!=null){\n weekday_calibration_charge = global.get('calibration_charge_start_weekday','file');\n}else{\n weekday_calibration_charge = 0;//default value from Sunday\n}\n\nfunction nextScheduleDay(adate, w) {\n w = w % 7;\n var daysToAdd = (w - adate.getDay() - 1 + 7) % 7;\n var nextDate = new Date(adate);\n nextDate.setDate(adate.getDate() + daysToAdd);\n return nextDate;\n}\n\nfunction prevScheduleDay(adate, w) {\n w = w % 7;\n var daysToSubtract = (adate.getDay() + 7 - w) % 7 + 1;\n var prevDate = new Date(adate);\n prevDate.setDate(adate.getDate() - daysToSubtract);\n return prevDate;\n}\n\nfunction chargeWindows(currentTime, weekday, starttime, timeToTOC) {\n var d0 = prevScheduleDay(currentTime, weekday);\n var d1 = nextScheduleDay(currentTime, weekday);\n\n // Convert starttime to a Date object\n var startTime = new Date(starttime);\n\n // Calculate the next ScheduleDay considering if the sum of timeToTOC and timeLeftMinutes is less than 7 days\n var timeLeftMinutes = Math.ceil((d1.getTime() - currentTime.getTime() + starttime) / (1000 * 60));\n\n if (timeToTOC + timeLeftMinutes < max_minutes_without_EOC) {\n // If the sum is less than 7 days, push next ScheduleDay to next week\n d1.setDate(d1.getDate() + 7);\n }\n\n // Set the start time for d0 and d1\n var startDateTimeD0 = new Date(d0);\n startDateTimeD0.setHours(startTime.getUTCHours(), startTime.getUTCMinutes(), 0, 0);\n\n var startDateTimeD1 = new Date(d1);\n startDateTimeD1.setHours(startTime.getUTCHours(), startTime.getUTCMinutes(), 0, 0);\n\n // Check if current time is within the charge window\n if (currentTime >= startDateTimeD0 && currentTime < startDateTimeD1) {\n // Calculate time left until the end of the window\n var timeLeftMillis = startDateTimeD1 - currentTime;\n var daysLeft = Math.floor(timeLeftMillis / (1000 * 60 * 60 * 24));\n var hoursLeft = Math.floor((timeLeftMillis % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));\n var minutesLeft = Math.ceil((timeLeftMillis % (1000 * 60 * 60)) / (1000 * 60));\n\n return daysLeft + 'd' + hoursLeft + 'h' + minutesLeft + 'm';\n } else {\n return 1;\n }\n}\n\nvar today = new Date(); // Assuming today's date\nvar timeLeft = chargeWindows(today, weekday_calibration_charge, minutes_from_midnight_calibration_charge, time_to_TOC);\n\nmsg.payload = timeLeft;\n\nreturn msg;",
"outputs": 1,
"timeout": "",
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 600,
"y": 640,
"wires": [
[]
]
},
{
"id": "985f0a278ffd922c",
"type": "change",
"z": "e2588b9d824334f7",
"name": "",
"rules": [
{
"t": "set",
"p": "#:(file)::start_calibration_charge_now",
"pt": "global",
"to": "payload",
"tot": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 2580,
"y": 500,
"wires": [
[
"3dc0dde6cbbd97c0"
]
]
},
{
"id": "de6a4357e8a1f15c",
"type": "change",
"z": "e2588b9d824334f7",
"name": "",
"rules": [
{
"t": "set",
"p": "#:(file)::start_calibration_charge_now",
"pt": "global",
"to": "payload",
"tot": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 2900,
"y": 620,
"wires": [
[
"3e2692e252d4b7ce"
]
]
},
{
"id": "ce4254f159092244",
"type": "change",
"z": "e2588b9d824334f7",
"name": "set start_calibration_charge_now to 0",
"rules": [
{
"t": "set",
"p": "payload",
"pt": "msg",
"to": "0",
"tot": "num"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 2570,
"y": 620,
"wires": [
[
"de6a4357e8a1f15c"
]
]
},
{
"id": "644fe572f173602e",
"type": "change",
"z": "e2588b9d824334f7",
"name": "",
"rules": [
{
"t": "set",
"p": "#:(file)::start_calibration_charge_now",
"pt": "global",
"to": "payload",
"tot": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 2440,
"y": 240,
"wires": [
[
"d1f75adc62fbfadb"
]
]
},
{
"id": "d1f75adc62fbfadb",
"type": "debug",
"z": "e2588b9d824334f7",
"name": "Debug for calibration",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": true,
"complete": "payload",
"targetType": "msg",
"statusVal": "payload",
"statusType": "auto",
"x": 2720,
"y": 240,
"wires": []
},
{
"id": "3dc0dde6cbbd97c0",
"type": "debug",
"z": "e2588b9d824334f7",
"name": "Debug for calibration",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": true,
"complete": "payload",
"targetType": "msg",
"statusVal": "payload",
"statusType": "auto",
"x": 2860,
"y": 500,
"wires": []
},
{
"id": "3e2692e252d4b7ce",
"type": "debug",
"z": "e2588b9d824334f7",
"name": "Debug for calibration",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": true,
"complete": "payload",
"targetType": "msg",
"statusVal": "payload",
"statusType": "auto",
"x": 3180,
"y": 620,
"wires": []
},
{
"id": "edf59fb9886b1048",
"type": "victron-input-custom",
"z": "322b256f0daf33ef",
"service": "com.victronenergy.settings",
"path": "/Settings/CGwacs/BatteryLife/MinimumSocLimit",
"serviceObj": {
"service": "com.victronenergy.settings",
"name": "com.victronenergy.settings"
},
"pathObj": {
"path": "/Settings/CGwacs/BatteryLife/MinimumSocLimit",
"name": "/Settings/CGwacs/BatteryLife/MinimumSocLimit",
"type": "number"
},
"name": "",
"onlyChanges": false,
"x": 310,
"y": 200,
"wires": [
[
"e31bd3d3a1c25da5"
]
]
},
{
"id": "e31bd3d3a1c25da5",
"type": "change",
"z": "322b256f0daf33ef",
"name": "min_soc",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "min_soc",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 680,
"y": 200,
"wires": [
[
"ec4dfbf95393066c"
]
]
},
{
"id": "e96ae0338cc426e7",
"type": "victron-input-custom",
"z": "322b256f0daf33ef",
"service": "com.victronenergy.battery/1",
"path": "/Dc/0/Power",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "com.victronenergy.battery (1)"
},
"pathObj": {
"path": "/Dc/0/Power",
"name": "/Dc/0/Power",
"type": "number"
},
"name": "",
"onlyChanges": false,
"x": 200,
"y": 260,
"wires": [
[
"86d2d524dcca3330"
]
]
},
{
"id": "86d2d524dcca3330",
"type": "change",
"z": "322b256f0daf33ef",
"name": "battery_power",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "battery_power",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 580,
"y": 260,
"wires": [
[
"ec4dfbf95393066c"
]
]
},
{
"id": "c21a992cf80c2d6f",
"type": "function",
"z": "322b256f0daf33ef",
"name": "controller_hold_min_soc_&_charge_to_min_soc&heating",
"func": "// get max charge power\nif(msg.payload.max_configured_charge_power==null ||msg.payload.max_configured_charge_power<0){\n max_charge_power=msg.payload.max_battery_charge_power;\n}else{\n max_charge_power=Math.min(msg.payload.max_configured_charge_power,msg.payload.max_battery_charge_power);\n}\n\nmax_inverter_power = msg.payload.num_phases*msg.payload.inverter_power;\n\n// variables for hold_min_soc controller\nBatterySelfDischargePower=200;//W\nn_batteries=msg.payload.num_batteries;\nHoldSocZone=1;\na=-2*BatterySelfDischargePower*n_batteries/HoldSocZone;\nb=-a*(msg.payload.min_soc+HoldSocZone);\nP_CONST = 0.5;\n// min soc among batteries\nsoc = msg.payload.lowest_soc;\ntarget_dc_power_to_hold_min_soc=soc*a+b;\n\n// current power setpoint\ninverter_power_setpoint= msg.payload.L1_AcPowerSetpoint+msg.payload.L2_AcPowerSetpoint+msg.payload.L3_AcPowerSetpoint;\n\nAC_in = msg.payload.AC_In;\nAC_out = msg.payload.AC_Out;\nPV_production =msg.payload.PVs_Power;\n\nif(global.get('start_calibration_charge_now_button','file') == true || global.get('start_calibration_charge_now','file')==1){\n d_p = max_charge_power-n_batteries*msg.payload.battery_power;\n power = AC_out+d_p;\n msg.payload.ess_mode =3;\n msg.payload.controller_info = \"Calibrtaion charge\";\n powerperphase=power/3;\n powerperphase=Math.max(powerperphase,-max_inverter_power);\n powerperphase=Math.floor(Math.min(powerperphase,max_inverter_power));\n msg.payload.power=powerperphase;\n return msg;\n}\n\nif(msg.payload.min_soc<=soc&&soc<=msg.payload.min_soc+1){\n d_p = target_dc_power_to_hold_min_soc-n_batteries*msg.payload.battery_power;\n delta = d_p*P_CONST;\n if(msg.payload.grid_setpoint>0){\n power = inverter_power_setpoint+delta;\n msg.payload.ess_mode =1;\n msg.payload.controller_info = \"Hold min SOC - ESS control\";\n }else{\n power = AC_out+delta-PV_production;\n msg.payload.ess_mode =3;\n msg.payload.controller_info = \"Hold min SOC - external control\";\n }\n}else if(soc<msg.payload.min_soc){\n d_p = max_charge_power-n_batteries*msg.payload.battery_power;\n //delta = d_p*P_CONST;\n //power = AC_out+d_p-PV_production;\n power = AC_out+d_p;\n msg.payload.ess_mode =3;\n msg.payload.controller_info = \"Charge to min SOC\";\n}else if(msg.payload.lowest_battery_temperature<250){\n d_p = max_charge_power-n_batteries*msg.payload.battery_power;\n //delta = d_p*P_CONST;\n power = AC_out+d_p;\n msg.payload.ess_mode =3;\n msg.payload.controller_info = \"Heat Battery\";\n}else{\n msg.payload.ess_mode =1;\n msg.payload.controller_info = \"ESS self-consumption\";\n msg.payload.power = inverter_power_setpoint/3;\n return msg;\n}\n\npowerperphase=power/3;\npowerperphase=Math.max(powerperphase,-max_inverter_power);\npowerperphase=Math.floor(Math.min(powerperphase,max_inverter_power));\n\nmsg.payload.power=powerperphase;\n\nreturn msg;\n\n\n",
"outputs": 1,
"timeout": "",
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 1290,
"y": 420,
"wires": [
[
"9e0230711eebbce6",
"68ad1a7bcb0734ee",
"2232724007eb535b",
"bec4a18419d01326",
"d16a932fea27e966",
"c006ba1786cbb219"
]
]
},
{
"id": "ec4dfbf95393066c",
"type": "join",
"z": "322b256f0daf33ef",
"name": "",
"mode": "custom",
"build": "object",
"property": "payload",
"propertyType": "msg",
"key": "topic",
"joiner": "\\n",
"joinerType": "str",
"accumulate": true,
"timeout": "",
"count": "16",
"reduceRight": false,
"reduceExp": "",
"reduceInit": "",
"reduceInitType": "",
"reduceFixup": "",
"x": 980,
"y": 420,
"wires": [
[
"c21a992cf80c2d6f"
]
]
},
{
"id": "42e7099d9e923743",
"type": "victron-input-custom",
"z": "322b256f0daf33ef",
"service": "com.victronenergy.vebus/276",
"path": "/Hub4/L1/AcPowerSetpoint",
"serviceObj": {
"service": "com.victronenergy.vebus/276",
"name": "MultiPlus-II 48/3000/35-32 (276)"
},
"pathObj": {
"path": "/Hub4/L1/AcPowerSetpoint",
"name": "/Hub4/L1/AcPowerSetpoint",
"type": "number"
},
"name": "",
"onlyChanges": false,
"x": 260,
"y": 560,
"wires": [
[
"3ad3750432ea80d6"
]
]
},
{
"id": "f87a6888f8e28402",
"type": "victron-input-custom",
"z": "322b256f0daf33ef",
"service": "com.victronenergy.vebus/276",
"path": "/Hub4/L2/AcPowerSetpoint",
"serviceObj": {
"service": "com.victronenergy.vebus/276",
"name": "MultiPlus-II 48/3000/35-32 (276)"
},
"pathObj": {
"path": "/Hub4/L2/AcPowerSetpoint",
"name": "/Hub4/L2/AcPowerSetpoint",
"type": "number"
},
"name": "",
"onlyChanges": false,
"x": 260,
"y": 620,
"wires": [
[
"7d1a5748311f693d"
]
]
},
{
"id": "4c9343aff34eed8a",
"type": "victron-input-custom",
"z": "322b256f0daf33ef",
"service": "com.victronenergy.vebus/276",
"path": "/Hub4/L3/AcPowerSetpoint",
"serviceObj": {
"service": "com.victronenergy.vebus/276",
"name": "MultiPlus-II 48/3000/35-32 (276)"
},
"pathObj": {
"path": "/Hub4/L3/AcPowerSetpoint",
"name": "/Hub4/L3/AcPowerSetpoint",
"type": "number"
},
"name": "",
"onlyChanges": false,
"x": 260,
"y": 680,
"wires": [
[
"3c08647bb2af3e60"
]
]
},
{
"id": "3ad3750432ea80d6",
"type": "change",
"z": "322b256f0daf33ef",
"name": "L1_AcPowerSetpoint",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "L1_AcPowerSetpoint",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 620,
"y": 560,
"wires": [
[
"ec4dfbf95393066c"
]
]
},
{
"id": "7d1a5748311f693d",
"type": "change",
"z": "322b256f0daf33ef",
"name": "L2_AcPowerSetpoint",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "L2_AcPowerSetpoint",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 620,
"y": 620,
"wires": [
[
"ec4dfbf95393066c"
]
]
},
{
"id": "3c08647bb2af3e60",
"type": "change",
"z": "322b256f0daf33ef",
"name": "L3_AcPowerSetpoint",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "L3_AcPowerSetpoint",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 620,
"y": 680,
"wires": [
[
"ec4dfbf95393066c"
]
]
},
{
"id": "9e0230711eebbce6",
"type": "debug",
"z": "322b256f0daf33ef",
"name": "Debug for inverter power setpoint",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": true,
"complete": "payload",
"targetType": "msg",
"statusVal": "payload",
"statusType": "auto",
"x": 1780,
"y": 440,
"wires": []
},
{
"id": "e233b1d2514ed9b2",
"type": "victron-input-custom",
"z": "322b256f0daf33ef",
"service": "com.victronenergy.battery/1",
"path": "/Info/MaxChargePower",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "com.victronenergy.battery (1)"
},
"pathObj": {
"path": "/Info/MaxChargePower",
"name": "/Info/MaxChargePower",
"type": "number"
},
"name": "",
"onlyChanges": false,
"x": 240,
"y": 320,
"wires": [
[
"307477049fed68a7"
]
]
},
{
"id": "27953b50225828d6",
"type": "victron-input-custom",
"z": "322b256f0daf33ef",
"service": "com.victronenergy.settings",
"path": "/Settings/CGwacs/MaxChargePower",
"serviceObj": {
"service": "com.victronenergy.settings",
"name": "com.victronenergy.settings"
},
"pathObj": {
"path": "/Settings/CGwacs/MaxChargePower",
"name": "/Settings/CGwacs/MaxChargePower",
"type": "number"
},
"name": "",
"onlyChanges": false,
"x": 270,
"y": 380,
"wires": [
[
"1204ed34a3b5a0cf"
]
]
},
{
"id": "307477049fed68a7",
"type": "change",
"z": "322b256f0daf33ef",
"name": "max_battery_charge_power",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "max_battery_charge_power",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 620,
"y": 320,
"wires": [
[
"ec4dfbf95393066c"
]
]
},
{
"id": "1204ed34a3b5a0cf",
"type": "change",
"z": "322b256f0daf33ef",
"name": "max_configured_charge_power",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "max_configured_charge_power",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 650,
"y": 380,
"wires": [
[
"ec4dfbf95393066c"
]
]
},
{
"id": "9bc82e5e6e1533c4",
"type": "victron-output-custom",
"z": "322b256f0daf33ef",
"service": "com.victronenergy.vebus/276",
"path": "/Hub4/L1/AcPowerSetpoint",
"serviceObj": {
"service": "com.victronenergy.vebus/276",
"name": "MultiPlus-II 48/3000/35-32 (276)"
},
"pathObj": {
"path": "/Hub4/L1/AcPowerSetpoint",
"name": "/Hub4/L1/AcPowerSetpoint",
"type": "number"
},
"name": "",
"onlyChanges": false,
"x": 2220,
"y": 320,
"wires": []
},
{
"id": "59ccefdf248431a4",
"type": "victron-output-custom",
"z": "322b256f0daf33ef",
"service": "com.victronenergy.vebus/276",
"path": "/Hub4/L2/AcPowerSetpoint",
"serviceObj": {
"service": "com.victronenergy.vebus/276",
"name": "MultiPlus-II 48/3000/35-32 (276)"
},
"pathObj": {
"path": "/Hub4/L2/AcPowerSetpoint",
"name": "/Hub4/L2/AcPowerSetpoint",
"type": "number"
},
"name": "",
"onlyChanges": false,
"x": 2220,
"y": 380,
"wires": []
},
{
"id": "eb55a558bcade512",
"type": "victron-output-custom",
"z": "322b256f0daf33ef",
"service": "com.victronenergy.vebus/276",
"path": "/Hub4/L3/AcPowerSetpoint",
"serviceObj": {
"service": "com.victronenergy.vebus/276",
"name": "MultiPlus-II 48/3000/35-32 (276)"
},
"pathObj": {
"path": "/Hub4/L3/AcPowerSetpoint",
"name": "/Hub4/L3/AcPowerSetpoint",
"type": "number"
},
"name": "",
"onlyChanges": false,
"x": 2220,
"y": 440,
"wires": []
},
{
"id": "5493bb5ebb5575a2",
"type": "change",
"z": "322b256f0daf33ef",
"name": "lowest_battery_temperature",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "lowest_battery_temperature",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 640,
"y": 440,
"wires": [
[
"ec4dfbf95393066c"
]
]
},
{
"id": "47dc96f07a26cb54",
"type": "victron-input-custom",
"z": "322b256f0daf33ef",
"service": "com.victronenergy.battery/1",
"path": "/LowestSoc",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/LowestSoc",
"name": "/LowestSoc",
"type": "number"
},
"name": "",
"onlyChanges": false,
"x": 170,
"y": 140,
"wires": [
[
"9ca3830858243254"
]
]
},
{
"id": "9ca3830858243254",
"type": "change",
"z": "322b256f0daf33ef",
"name": "lowest_soc",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "lowest_soc",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 510,
"y": 140,
"wires": [
[
"ec4dfbf95393066c"
]
]
},
{
"id": "f4d06320d2637ed8",
"type": "victron-input-custom",
"z": "322b256f0daf33ef",
"service": "com.victronenergy.battery/1",
"path": "/NumOfBatteries",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/NumOfBatteries",
"name": "/NumOfBatteries",
"type": "number"
},
"name": "",
"onlyChanges": false,
"x": 190,
"y": 80,
"wires": [
[
"bb64aef92bbd2765"
]
]
},
{
"id": "bb64aef92bbd2765",
"type": "change",
"z": "322b256f0daf33ef",
"name": "num_batteries",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "num_batteries",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 460,
"y": 80,
"wires": [
[
"ec4dfbf95393066c"
]
]
},
{
"id": "2232724007eb535b",
"type": "ui_text",
"z": "322b256f0daf33ef",
"group": "e177392401620838",
"order": 1,
"width": 0,
"height": 0,
"name": "Controller Info",
"label": "Controller Info",
"format": "{{msg.payload.controller_info}}",
"layout": "row-spread",
"className": "",
"style": false,
"font": "Arial,Arial,Helvetica,sans-serif",
"fontSize": "20",
"color": "#000000",
"x": 1720,
"y": 220,
"wires": []
},
{
"id": "68ad1a7bcb0734ee",
"type": "function",
"z": "322b256f0daf33ef",
"name": "Get corrected inverter power setpoint",
"func": "msg.payload = msg.payload.power;\nreturn msg;",
"outputs": 1,
"timeout": "",
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 1790,
"y": 380,
"wires": [
[
"9bc82e5e6e1533c4",
"59ccefdf248431a4",
"eb55a558bcade512"
]
]
},
{
"id": "4650c97f969e0db2",
"type": "victron-input-custom",
"z": "322b256f0daf33ef",
"service": "com.victronenergy.battery/1",
"path": "/Dc/0/LowestTemperature",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/Dc/0/LowestTemperature",
"name": "/Dc/0/LowestTemperature",
"type": "number"
},
"name": "",
"onlyChanges": false,
"x": 220,
"y": 440,
"wires": [
[
"5493bb5ebb5575a2"
]
]
},
{
"id": "1555eb02fa5903f2",
"type": "comment",
"z": "322b256f0daf33ef",
"name": "salidomo controllers will ignore grid setpoint setting",
"info": "",
"x": 1270,
"y": 380,
"wires": []
},
{
"id": "112368177dccd027",
"type": "victron-output-custom",
"z": "322b256f0daf33ef",
"service": "com.victronenergy.settings",
"path": "/Settings/CGwacs/Hub4Mode",
"serviceObj": {
"service": "com.victronenergy.settings",
"name": "com.victronenergy.settings"
},
"pathObj": {
"path": "/Settings/CGwacs/Hub4Mode",
"name": "/Settings/CGwacs/Hub4Mode",
"type": "number"
},
"name": "",
"onlyChanges": false,
"x": 2190,
"y": 580,
"wires": []
},
{
"id": "bec4a18419d01326",
"type": "function",
"z": "322b256f0daf33ef",
"name": "Get ESS mode",
"func": "msg.payload = msg.payload.ess_mode;\nreturn msg;",
"outputs": 1,
"timeout": "",
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 1720,
"y": 580,
"wires": [
[
"112368177dccd027",
"c6526d18e03abf60"
]
]
},
{
"id": "c6526d18e03abf60",
"type": "debug",
"z": "322b256f0daf33ef",
"name": "Debug for ESS mode",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": true,
"complete": "payload",
"targetType": "msg",
"statusVal": "payload",
"statusType": "auto",
"x": 2080,
"y": 520,
"wires": []
},
{
"id": "7887f8d8f1b95425",
"type": "victron-input-custom",
"z": "322b256f0daf33ef",
"service": "com.victronenergy.vebus/276",
"path": "/Ac/Out/P",
"serviceObj": {
"service": "com.victronenergy.vebus/276",
"name": "MultiPlus-II 48/3000/35-32 (276)"
},
"pathObj": {
"path": "/Ac/Out/P",
"name": "/Ac/Out/P",
"type": "number"
},
"name": "",
"onlyChanges": false,
"x": 210,
"y": 880,
"wires": [
[
"88b94b58284f6e59"
]
]
},
{
"id": "14774be09f2702cb",
"type": "change",
"z": "322b256f0daf33ef",
"name": "PVs_Power",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "PVs_Power",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 550,
"y": 1020,
"wires": [
[
"ec4dfbf95393066c"
]
]
},
{
"id": "6ca9ae5cc145bf6c",
"type": "victron-input-custom",
"z": "322b256f0daf33ef",
"service": "com.victronenergy.system/0",
"path": "/Dc/Pv/Power",
"serviceObj": {
"service": "com.victronenergy.system/0",
"name": "com.victronenergy.system (0)"
},
"pathObj": {
"path": "/Dc/Pv/Power",
"name": "/Dc/Pv/Power",
"type": "number"
},
"name": "",
"onlyChanges": false,
"x": 210,
"y": 1020,
"wires": [
[
"14774be09f2702cb"
]
]
},
{
"id": "d16a932fea27e966",
"type": "ui_text",
"z": "322b256f0daf33ef",
"group": "e177392401620838",
"order": 2,
"width": 0,
"height": 0,
"name": "Lowest SOC",
"label": "Lowest_SOC",
"format": "{{msg.payload.lowest_soc}}",
"layout": "row-spread",
"className": "",
"style": false,
"font": "Arial,Arial,Helvetica,sans-serif",
"fontSize": "20",
"color": "#000000",
"x": 1710,
"y": 300,
"wires": []
},
{
"id": "b3bbeb9c09af7c8b",
"type": "victron-output-custom",
"z": "322b256f0daf33ef",
"service": "com.victronenergy.settings",
"path": "/Settings/CGwacs/BatteryLife/State",
"serviceObj": {
"service": "com.victronenergy.settings",
"name": "com.victronenergy.settings"
},
"pathObj": {
"path": "/Settings/CGwacs/BatteryLife/State",
"name": "/Settings/CGwacs/BatteryLife/State",
"type": "number"
},
"name": "",
"onlyChanges": false,
"x": 2330,
"y": 660,
"wires": []
},
{
"id": "c006ba1786cbb219",
"type": "function",
"z": "322b256f0daf33ef",
"name": "Set BatteryLife state to 10 - without BatteryLife",
"func": "//msg.payload = msg.payload.BatteryLife_state;\nmsg.payload = 10;\nreturn msg;",
"outputs": 1,
"timeout": "",
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 1820,
"y": 660,
"wires": [
[
"b3bbeb9c09af7c8b",
"7cbd2c5af31569a2"
]
]
},
{
"id": "7cbd2c5af31569a2",
"type": "debug",
"z": "322b256f0daf33ef",
"name": "Debug for BatteryLife state",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": true,
"complete": "payload",
"targetType": "msg",
"statusVal": "payload",
"statusType": "auto",
"x": 2220,
"y": 720,
"wires": []
},
{
"id": "0b031aa1edee7bf3",
"type": "comment",
"z": "322b256f0daf33ef",
"name": "Battery Related Info",
"info": "",
"x": 130,
"y": 40,
"wires": []
},
{
"id": "7f85ce0ea68e4ff3",
"type": "comment",
"z": "322b256f0daf33ef",
"name": "Ac Power Setpoint",
"info": "",
"x": 130,
"y": 500,
"wires": []
},
{
"id": "7a4db64fbb9bed91",
"type": "comment",
"z": "322b256f0daf33ef",
"name": "Ac Out",
"info": "",
"x": 90,
"y": 820,
"wires": []
},
{
"id": "f434795c9ab1b58a",
"type": "comment",
"z": "322b256f0daf33ef",
"name": "PV Power",
"info": "",
"x": 100,
"y": 960,
"wires": []
},
{
"id": "88b94b58284f6e59",
"type": "change",
"z": "322b256f0daf33ef",
"name": "AC_Out",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "AC_Out",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 480,
"y": 880,
"wires": [
[
"ec4dfbf95393066c"
]
]
},
{
"id": "55dfa73b801bef97",
"type": "victron-input-custom",
"z": "322b256f0daf33ef",
"service": "com.victronenergy.vebus/276",
"path": "/ProductName",
"serviceObj": {
"service": "com.victronenergy.vebus/276",
"name": "MultiPlus-II 48/3000/35-32 (276)"
},
"pathObj": {
"path": "/ProductName",
"name": "/ProductName",
"type": "string"
},
"name": "",
"onlyChanges": false,
"x": 220,
"y": 1180,
"wires": [
[
"e629bf512e18a20a"
]
]
},
{
"id": "0e7f87ce40b61ee3",
"type": "victron-input-custom",
"z": "322b256f0daf33ef",
"service": "com.victronenergy.vebus/276",
"path": "/Ac/NumberOfPhases",
"serviceObj": {
"service": "com.victronenergy.vebus/276",
"name": "MultiPlus-II 48/3000/35-32 (276)"
},
"pathObj": {
"path": "/Ac/NumberOfPhases",
"name": "/Ac/NumberOfPhases",
"type": "number"
},
"name": "",
"onlyChanges": false,
"x": 240,
"y": 1240,
"wires": [
[
"3d827e465503237c"
]
]
},
{
"id": "90ce1991b97db54c",
"type": "comment",
"z": "322b256f0daf33ef",
"name": "Calculate Max Inverter Power",
"info": "",
"x": 160,
"y": 1120,
"wires": []
},
{
"id": "e629bf512e18a20a",
"type": "function",
"z": "322b256f0daf33ef",
"name": "get_inverter_power",
"func": "str = msg.payload;\nfirstIndex = str.indexOf(\"/\");\nsecondIndex = str.indexOf(\"/\", firstIndex + 1);\n\nif (firstIndex !== -1 && secondIndex !== -1) {\n substring = str.substring(firstIndex + 1, secondIndex);\n msg.payload = Number(substring);\n}else{\n msg.payload = 0;\n}\n\nreturn msg;",
"outputs": 1,
"timeout": 0,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 530,
"y": 1180,
"wires": [
[
"7cc14538a34f4226"
]
]
},
{
"id": "7cc14538a34f4226",
"type": "change",
"z": "322b256f0daf33ef",
"name": "inverter_power",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "inverter_power",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 760,
"y": 1180,
"wires": [
[
"ec4dfbf95393066c"
]
]
},
{
"id": "3d827e465503237c",
"type": "change",
"z": "322b256f0daf33ef",
"name": "num_phases",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "num_phases",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 570,
"y": 1240,
"wires": [
[
"ec4dfbf95393066c"
]
]
},
{
"id": "ca614a4e091b6469",
"type": "victron-input-custom",
"z": "322b256f0daf33ef",
"service": "com.victronenergy.vebus/276",
"path": "/Ac/ActiveIn/P",
"serviceObj": {
"service": "com.victronenergy.vebus/276",
"name": "MultiPlus-II 48/3000/35-32 (276)"
},
"pathObj": {
"path": "/Ac/ActiveIn/P",
"name": "/Ac/ActiveIn/P",
"type": "number"
},
"name": "",
"onlyChanges": false,
"roundValues": "no",
"x": 220,
"y": 740,
"wires": [
[
"63358306618f97ea"
]
]
},
{
"id": "63358306618f97ea",
"type": "change",
"z": "322b256f0daf33ef",
"name": "AC_In",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "AC_In",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 530,
"y": 740,
"wires": [
[
"ec4dfbf95393066c"
]
]
},
{
"id": "2978db68222aa8e5",
"type": "victron-input-custom",
"z": "322b256f0daf33ef",
"service": "com.victronenergy.settings",
"path": "/Settings/CGwacs/AcPowerSetPoint",
"serviceObj": {
"service": "com.victronenergy.settings",
"name": "com.victronenergy.settings"
},
"pathObj": {
"path": "/Settings/CGwacs/AcPowerSetPoint",
"name": "/Settings/CGwacs/AcPowerSetPoint",
"type": "number"
},
"name": "",
"onlyChanges": false,
"x": 270,
"y": 1360,
"wires": [
[
"68fa76cd115eee72"
]
]
},
{
"id": "08e103d823555f04",
"type": "comment",
"z": "322b256f0daf33ef",
"name": "Grid Setpoint",
"info": "",
"x": 110,
"y": 1320,
"wires": []
},
{
"id": "68fa76cd115eee72",
"type": "change",
"z": "322b256f0daf33ef",
"name": "grid_setpoint",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "grid_setpoint",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 590,
"y": 1360,
"wires": [
[
"ec4dfbf95393066c"
]
]
},
{
"id": "43c4baa311f48203",
"type": "function",
"z": "32b2f9d4415d82ce",
"name": "cal_max_discharge_power",
"func": "configured_max_inverter_power = msg.payload.num_phases*msg.payload.inverter_power;\nn_batteries=msg.payload.num_batteries;\ndischarge_Power_PVs = msg.payload.PVs_Power;\nmax_discharge_current_batteries = 15*(5*n_batteries-msg.payload.num_limb_string);\nDC_BUS_Voltage = msg.payload.DC_BUS_Voltage;\n\nif(44.1<DC_BUS_Voltage && DC_BUS_Voltage <=45){\n max_discharge_current_batteries -=(45-DC_BUS_Voltage)*20*n_batteries;\n}\n\nif(DC_BUS_Voltage <=44.1){\n max_discharge_current_batteries = 0;\n}\n \nmax_discharge_power_inverter = Math.floor(msg.payload.DC_BUS_Voltage*max_discharge_current_batteries+discharge_Power_PVs);\nmsg.payload = Math.min(max_discharge_power_inverter,configured_max_inverter_power);\n//msg.payload = max_discharge_current_batteries;\nreturn msg;",
"outputs": 1,
"timeout": "",
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 1960,
"y": 560,
"wires": [
[
"6378e5de6ad21fcd",
"b305754081d60953"
]
]
},
{
"id": "b305754081d60953",
"type": "victron-output-custom",
"z": "32b2f9d4415d82ce",
"service": "com.victronenergy.settings",
"path": "/Settings/CGwacs/MaxDischargePower",
"serviceObj": {
"service": "com.victronenergy.settings",
"name": "com.victronenergy.settings"
},
"pathObj": {
"path": "/Settings/CGwacs/MaxDischargePower",
"name": "/Settings/CGwacs/MaxDischargePower",
"type": "number"
},
"name": "",
"onlyChanges": false,
"x": 2400,
"y": 600,
"wires": []
},
{
"id": "e946ebc65cb86f48",
"type": "join",
"z": "32b2f9d4415d82ce",
"name": "all message topics",
"mode": "custom",
"build": "object",
"property": "payload",
"propertyType": "msg",
"key": "topic",
"joiner": "\\n",
"joinerType": "str",
"accumulate": true,
"timeout": "",
"count": "10",
"reduceRight": false,
"reduceExp": "",
"reduceInit": "",
"reduceInitType": "",
"reduceFixup": "",
"x": 940,
"y": 560,
"wires": [
[
"83e42c33509f7c21"
]
]
},
{
"id": "cec33f72f0191df8",
"type": "victron-input-custom",
"z": "32b2f9d4415d82ce",
"service": "com.victronenergy.vebus/276",
"path": "/Dc/0/Voltage",
"serviceObj": {
"service": "com.victronenergy.vebus/276",
"name": "MultiPlus-II 48/3000/35-32 (276)"
},
"pathObj": {
"path": "/Dc/0/Voltage",
"name": "/Dc/0/Voltage",
"type": "number"
},
"name": "",
"onlyChanges": false,
"x": 240,
"y": 720,
"wires": [
[
"74bc65311e479c3d"
]
]
},
{
"id": "7298a183c5c9521c",
"type": "change",
"z": "32b2f9d4415d82ce",
"name": "PVs_Power",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "PVs_Power",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 550,
"y": 600,
"wires": [
[
"e946ebc65cb86f48"
]
]
},
{
"id": "74bc65311e479c3d",
"type": "change",
"z": "32b2f9d4415d82ce",
"name": "DC_BUS_Voltage",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "DC_BUS_Voltage",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 590,
"y": 720,
"wires": [
[
"e946ebc65cb86f48"
]
]
},
{
"id": "88a83948dc7d3819",
"type": "ui_text",
"z": "32b2f9d4415d82ce",
"group": "e177392401620838",
"order": 3,
"width": 0,
"height": 0,
"name": "",
"label": "Battery Health",
"format": "{{msg.payload.battery_health}}",
"layout": "row-spread",
"className": "",
"style": false,
"font": "Arial,Arial,Helvetica,sans-serif",
"fontSize": "20",
"color": "#000000",
"x": 1520,
"y": 500,
"wires": []
},
{
"id": "4947a0f8f2b4940b",
"type": "victron-input-custom",
"z": "32b2f9d4415d82ce",
"service": "com.victronenergy.vebus/276",
"path": "/Hub4/L1/AcPowerSetpoint",
"serviceObj": {
"service": "com.victronenergy.vebus/276",
"name": "MultiPlus-II 48/3000/35-32 (276)"
},
"pathObj": {
"path": "/Hub4/L1/AcPowerSetpoint",
"name": "/Hub4/L1/AcPowerSetpoint",
"type": "number"
},
"name": "",
"onlyChanges": false,
"x": 280,
"y": 840,
"wires": [
[
"ba9ffbf9cd06fe9c"
]
]
},
{
"id": "b338670f5c9310e3",
"type": "victron-input-custom",
"z": "32b2f9d4415d82ce",
"service": "com.victronenergy.vebus/276",
"path": "/Hub4/L2/AcPowerSetpoint",
"serviceObj": {
"service": "com.victronenergy.vebus/276",
"name": "MultiPlus-II 48/3000/35-32 (276)"
},
"pathObj": {
"path": "/Hub4/L2/AcPowerSetpoint",
"name": "/Hub4/L2/AcPowerSetpoint",
"type": "number"
},
"name": "",
"onlyChanges": false,
"x": 280,
"y": 900,
"wires": [
[
"ee9a0bab1240743d"
]
]
},
{
"id": "78acb0cb0aca3a45",
"type": "victron-input-custom",
"z": "32b2f9d4415d82ce",
"service": "com.victronenergy.vebus/276",
"path": "/Hub4/L3/AcPowerSetpoint",
"serviceObj": {
"service": "com.victronenergy.vebus/276",
"name": "MultiPlus-II 48/3000/35-32 (276)"
},
"pathObj": {
"path": "/Hub4/L3/AcPowerSetpoint",
"name": "/Hub4/L3/AcPowerSetpoint",
"type": "number"
},
"name": "",
"onlyChanges": false,
"x": 280,
"y": 960,
"wires": [
[
"0789753bcf77148d"
]
]
},
{
"id": "ba9ffbf9cd06fe9c",
"type": "change",
"z": "32b2f9d4415d82ce",
"name": "L1_AcPowerSetpoint",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "L1_AcPowerSetpoint",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 637,
"y": 840,
"wires": [
[
"e946ebc65cb86f48"
]
]
},
{
"id": "ee9a0bab1240743d",
"type": "change",
"z": "32b2f9d4415d82ce",
"name": "L2_AcPowerSetpoint",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "L2_AcPowerSetpoint",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 640,
"y": 900,
"wires": [
[
"e946ebc65cb86f48"
]
]
},
{
"id": "0789753bcf77148d",
"type": "change",
"z": "32b2f9d4415d82ce",
"name": "L3_AcPowerSetpoint",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "L3_AcPowerSetpoint",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 640,
"y": 960,
"wires": [
[
"e946ebc65cb86f48"
]
]
},
{
"id": "9d0c50d6661ed767",
"type": "comment",
"z": "32b2f9d4415d82ce",
"name": "PV Power",
"info": "",
"x": 120,
"y": 560,
"wires": []
},
{
"id": "eeff15118537abb2",
"type": "comment",
"z": "32b2f9d4415d82ce",
"name": "Ac Power Setpoint",
"info": "",
"x": 150,
"y": 800,
"wires": []
},
{
"id": "248284788085e727",
"type": "victron-input-custom",
"z": "32b2f9d4415d82ce",
"service": "com.victronenergy.system/0",
"path": "/Dc/Pv/Power",
"serviceObj": {
"service": "com.victronenergy.system/0",
"name": "com.victronenergy.system (0)"
},
"pathObj": {
"path": "/Dc/Pv/Power",
"name": "/Dc/Pv/Power",
"type": "number"
},
"name": "",
"onlyChanges": false,
"x": 230,
"y": 600,
"wires": [
[
"7298a183c5c9521c"
]
]
},
{
"id": "f6f1cef7ea0c68bf",
"type": "victron-input-custom",
"z": "32b2f9d4415d82ce",
"service": "com.victronenergy.battery/1",
"path": "/NumOfLimbStrings",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/NumOfLimbStrings",
"name": "/NumOfLimbStrings",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 220,
"y": 280,
"wires": [
[
"ac12caf306430294"
]
]
},
{
"id": "ba9a71d41b31a262",
"type": "comment",
"z": "32b2f9d4415d82ce",
"name": "DBus Voltage",
"info": "",
"x": 130,
"y": 660,
"wires": []
},
{
"id": "5094d7152f3846a8",
"type": "switch",
"z": "32b2f9d4415d82ce",
"name": "only_move_on_when_batteries_are_healthy",
"property": "payload.num_limb_string",
"propertyType": "msg",
"rules": [
{
"t": "gte",
"v": "0",
"vt": "str"
}
],
"checkall": "true",
"repair": false,
"outputs": 1,
"x": 1610,
"y": 560,
"wires": [
[
"43c4baa311f48203"
]
]
},
{
"id": "43999600211c7ec5",
"type": "victron-input-custom",
"z": "32b2f9d4415d82ce",
"service": "com.victronenergy.battery/1",
"path": "/NumOfBatteries",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/NumOfBatteries",
"name": "/NumOfBatteries",
"type": "number"
},
"name": "",
"onlyChanges": false,
"x": 210,
"y": 360,
"wires": [
[
"c0c3a26169fd6a2b"
]
]
},
{
"id": "fd833061b942ecc3",
"type": "comment",
"z": "32b2f9d4415d82ce",
"name": "Battery Info",
"info": "",
"x": 130,
"y": 220,
"wires": []
},
{
"id": "c0c3a26169fd6a2b",
"type": "change",
"z": "32b2f9d4415d82ce",
"name": "num_batteries",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "num_batteries",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 500,
"y": 360,
"wires": [
[
"e946ebc65cb86f48"
]
]
},
{
"id": "83e42c33509f7c21",
"type": "function",
"z": "32b2f9d4415d82ce",
"name": "get_total_number_of_limb_strings",
"func": "let total_num_limb_string=0;\nlimb_string_list = msg.payload.limb_string_list;\nmain_switch_state_list = msg.payload.main_switch_state;\nbattery_health = [];\n\nfor (let i = 0; i < limb_string_list.length; i++) {\n num_limb_string = limb_string_list[i][1][0];\n main_switch_state=main_switch_state_list[i][1][0];\n if(num_limb_string<=1){\n total_num_limb_string+=num_limb_string;\n battery_health.push(\"Battery \"+(i+2)+\" has \" + num_limb_string+ \" limb strings.\");\n }else if(main_switch_state == true){\n total_num_limb_string = -1;//no meaning here, just used for stopping calculating max discharge power\n battery_health.push(\"Battery \"+(i+2)+\" has main switch open!\");\n return msg;\n }\n else{\n total_num_limb_string = -1;//if there are more than 1 limb string in a battery, should give alarm to stop use this battery\n battery_health.push(\"Battery \"+(i+2)+\" has more than 1 limb string!\");\n return msg;\n }\n}\nmsg.payload.num_limb_string = total_num_limb_string;\nmsg.payload.battery_health = battery_health;\n\nreturn msg;",
"outputs": 1,
"timeout": 0,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 1220,
"y": 560,
"wires": [
[
"5094d7152f3846a8",
"88a83948dc7d3819"
]
]
},
{
"id": "6378e5de6ad21fcd",
"type": "debug",
"z": "32b2f9d4415d82ce",
"name": "Debug for Max Discharge Power",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": true,
"complete": "payload",
"targetType": "msg",
"statusVal": "payload",
"statusType": "auto",
"x": 2290,
"y": 500,
"wires": []
},
{
"id": "ac12caf306430294",
"type": "change",
"z": "32b2f9d4415d82ce",
"name": "limb_string_list",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "limb_string_list",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 500,
"y": 280,
"wires": [
[
"e946ebc65cb86f48"
]
]
},
{
"id": "6e6ac3c77f24e878",
"type": "victron-input-custom",
"z": "32b2f9d4415d82ce",
"service": "com.victronenergy.battery/1",
"path": "/Diagnostics/IoStatus/MainSwitchClosed",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/Diagnostics/IoStatus/MainSwitchClosed",
"name": "/Diagnostics/IoStatus/MainSwitchClosed",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 280,
"y": 440,
"wires": [
[
"e09d62c9dfd48398"
]
]
},
{
"id": "e09d62c9dfd48398",
"type": "change",
"z": "32b2f9d4415d82ce",
"name": "main_switch_state",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "main_switch_state",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 630,
"y": 440,
"wires": [
[
"e946ebc65cb86f48"
]
]
},
{
"id": "e29be84b4acceab6",
"type": "victron-input-custom",
"z": "32b2f9d4415d82ce",
"service": "com.victronenergy.vebus/276",
"path": "/ProductName",
"serviceObj": {
"service": "com.victronenergy.vebus/276",
"name": "MultiPlus-II 48/3000/35-32 (276)"
},
"pathObj": {
"path": "/ProductName",
"name": "/ProductName",
"type": "string"
},
"name": "",
"onlyChanges": false,
"x": 240,
"y": 1100,
"wires": [
[
"60d904f7b9264e32"
]
]
},
{
"id": "8a6b3d4d62ae91dc",
"type": "victron-input-custom",
"z": "32b2f9d4415d82ce",
"service": "com.victronenergy.vebus/276",
"path": "/Ac/NumberOfPhases",
"serviceObj": {
"service": "com.victronenergy.vebus/276",
"name": "MultiPlus-II 48/3000/35-32 (276)"
},
"pathObj": {
"path": "/Ac/NumberOfPhases",
"name": "/Ac/NumberOfPhases",
"type": "number"
},
"name": "",
"onlyChanges": false,
"x": 260,
"y": 1160,
"wires": [
[
"9f2b4a19a3193a2b"
]
]
},
{
"id": "98dd4cfc79b2ea67",
"type": "comment",
"z": "32b2f9d4415d82ce",
"name": "Calculate Max Inverter Power",
"info": "",
"x": 180,
"y": 1040,
"wires": []
},
{
"id": "60d904f7b9264e32",
"type": "function",
"z": "32b2f9d4415d82ce",
"name": "get_inverter_power",
"func": "str = msg.payload;\nfirstIndex = str.indexOf(\"/\");\nsecondIndex = str.indexOf(\"/\", firstIndex + 1);\n\nif (firstIndex !== -1 && secondIndex !== -1) {\n substring = str.substring(firstIndex + 1, secondIndex);\n msg.payload = Number(substring);\n}else{\n msg.payload = 0;\n}\n\nreturn msg;",
"outputs": 1,
"timeout": 0,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 550,
"y": 1100,
"wires": [
[
"8ce7f1993cecc835"
]
]
},
{
"id": "8ce7f1993cecc835",
"type": "change",
"z": "32b2f9d4415d82ce",
"name": "inverter_power",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "inverter_power",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 780,
"y": 1100,
"wires": [
[
"e946ebc65cb86f48"
]
]
},
{
"id": "9f2b4a19a3193a2b",
"type": "change",
"z": "32b2f9d4415d82ce",
"name": "num_phases",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "num_phases",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 590,
"y": 1160,
"wires": [
[
"e946ebc65cb86f48"
]
]
},
{
"id": "ab3e15b7fa7336e4",
"type": "comment",
"z": "32b2f9d4415d82ce",
"name": "Max Discharge Power of Inverter(Battery+PV)",
"info": "",
"x": 2330,
"y": 560,
"wires": []
},
{
"id": "4a421b5a9efccf75",
"type": "comment",
"z": "812b3c1b3d3fa76b",
"name": "Parse Alarms: 26",
"info": "",
"x": 240,
"y": 80,
"wires": []
},
{
"id": "8596c0dc478b1b02",
"type": "victron-input-custom",
"z": "812b3c1b3d3fa76b",
"service": "com.victronenergy.battery/1",
"path": "/AlarmFlags/CME",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/AlarmFlags/CME",
"name": "/AlarmFlags/CME",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 310,
"y": 920,
"wires": [
[
"644fd6453eeca4be"
]
]
},
{
"id": "3e09054f0e54a588",
"type": "victron-input-custom",
"z": "812b3c1b3d3fa76b",
"service": "com.victronenergy.battery/1",
"path": "/AlarmFlags/DATA",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/AlarmFlags/DATA",
"name": "/AlarmFlags/DATA",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 310,
"y": 1480,
"wires": [
[
"30d43b7beebf9bb9"
]
]
},
{
"id": "75f1ef23840fe7a9",
"type": "victron-input-custom",
"z": "812b3c1b3d3fa76b",
"service": "com.victronenergy.battery/1",
"path": "/AlarmFlags/FUSE",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/AlarmFlags/FUSE",
"name": "/AlarmFlags/FUSE",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 320,
"y": 680,
"wires": [
[
"f3e5be9d70303fd9"
]
]
},
{
"id": "21b93e5c756c9a60",
"type": "victron-input-custom",
"z": "812b3c1b3d3fa76b",
"service": "com.victronenergy.battery/1",
"path": "/AlarmFlags/HEBT",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/AlarmFlags/HEBT",
"name": "/AlarmFlags/HEBT",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 320,
"y": 1580,
"wires": [
[
"b22ce8dbee5ca745"
]
]
},
{
"id": "cfc5a92164354a07",
"type": "victron-input-custom",
"z": "812b3c1b3d3fa76b",
"service": "com.victronenergy.battery/1",
"path": "/AlarmFlags/HTFS",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/AlarmFlags/HTFS",
"name": "/AlarmFlags/HTFS",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 320,
"y": 1440,
"wires": [
[
"e996de028f2a9e80"
]
]
},
{
"id": "d6e422e6f274f8bb",
"type": "victron-input-custom",
"z": "812b3c1b3d3fa76b",
"service": "com.victronenergy.battery/1",
"path": "/AlarmFlags/HTRE",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/AlarmFlags/HTRE",
"name": "/AlarmFlags/HTRE",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 320,
"y": 740,
"wires": [
[
"c54215196b096586"
]
]
},
{
"id": "31ea89722d0b4664",
"type": "victron-input-custom",
"z": "812b3c1b3d3fa76b",
"service": "com.victronenergy.battery/1",
"path": "/AlarmFlags/HWEM",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/AlarmFlags/HWEM",
"name": "/AlarmFlags/HWEM",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 320,
"y": 1040,
"wires": [
[
"8f8fd0429cee609e"
]
]
},
{
"id": "c569c9d1ab910233",
"type": "victron-input-custom",
"z": "812b3c1b3d3fa76b",
"service": "com.victronenergy.battery/1",
"path": "/AlarmFlags/HWFL",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/AlarmFlags/HWFL",
"name": "/AlarmFlags/HWFL",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 320,
"y": 980,
"wires": [
[
"478c1c46dcd45a31"
]
]
},
{
"id": "e7062b99bef916be",
"type": "victron-input-custom",
"z": "812b3c1b3d3fa76b",
"service": "com.victronenergy.battery/1",
"path": "/AlarmFlags/IDM2",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/AlarmFlags/IDM2",
"name": "/AlarmFlags/IDM2",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 310,
"y": 500,
"wires": [
[
"4f4f5ad0a98541db"
]
]
},
{
"id": "43c83a0c3f8b9062",
"type": "victron-input-custom",
"z": "812b3c1b3d3fa76b",
"service": "com.victronenergy.battery/1",
"path": "/AlarmFlags/ISOB",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/AlarmFlags/ISOB",
"name": "/AlarmFlags/ISOB",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 310,
"y": 560,
"wires": [
[
"23008a02e8e7da76"
]
]
},
{
"id": "0c8cf7e25d76c2bb",
"type": "victron-input-custom",
"z": "812b3c1b3d3fa76b",
"service": "com.victronenergy.battery/1",
"path": "/AlarmFlags/LMPA",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/AlarmFlags/LMPA",
"name": "/AlarmFlags/LMPA",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 320,
"y": 1540,
"wires": [
[
"87e8ae20b843c381"
]
]
},
{
"id": "a947047c597fb003",
"type": "victron-input-custom",
"z": "812b3c1b3d3fa76b",
"service": "com.victronenergy.battery/1",
"path": "/AlarmFlags/MID2",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/AlarmFlags/MID2",
"name": "/AlarmFlags/MID2",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 310,
"y": 1380,
"wires": [
[
"943a0ba24db0fab4"
]
]
},
{
"id": "b537a788864448e2",
"type": "victron-input-custom",
"z": "812b3c1b3d3fa76b",
"service": "com.victronenergy.battery/1",
"path": "/AlarmFlags/MSWE",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/AlarmFlags/MSWE",
"name": "/AlarmFlags/MSWE",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 320,
"y": 620,
"wires": [
[
"e104c979769c9e92"
]
]
},
{
"id": "8453c5b3a2515d71",
"type": "victron-input-custom",
"z": "812b3c1b3d3fa76b",
"service": "com.victronenergy.battery/1",
"path": "/AlarmFlags/STRE",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/AlarmFlags/STRE",
"name": "/AlarmFlags/STRE",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 320,
"y": 860,
"wires": [
[
"00b4380b1ae68023"
]
]
},
{
"id": "2b6ae98d1f9327d1",
"type": "victron-input-custom",
"z": "812b3c1b3d3fa76b",
"service": "com.victronenergy.battery/1",
"path": "/AlarmFlags/TCPE",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/AlarmFlags/TCPE",
"name": "/AlarmFlags/TCPE",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 320,
"y": 800,
"wires": [
[
"9603499ff1d02af5"
]
]
},
{
"id": "c5c363f24fdb8e5b",
"type": "victron-input-custom",
"z": "812b3c1b3d3fa76b",
"service": "com.victronenergy.battery/1",
"path": "/AlarmFlags/TaM2",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/AlarmFlags/TaM2",
"name": "/AlarmFlags/TaM2",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 310,
"y": 200,
"wires": [
[
"3f6cc0eea8917fc6"
]
]
},
{
"id": "21173aa9d7b7a996",
"type": "victron-input-custom",
"z": "812b3c1b3d3fa76b",
"service": "com.victronenergy.battery/1",
"path": "/AlarmFlags/Tam",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/AlarmFlags/Tam",
"name": "/AlarmFlags/Tam",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 310,
"y": 140,
"wires": [
[
"894cd30780eeff13"
]
]
},
{
"id": "5374532911ad6bbf",
"type": "victron-input-custom",
"z": "812b3c1b3d3fa76b",
"service": "com.victronenergy.battery/1",
"path": "/AlarmFlags/TbM2",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/AlarmFlags/TbM2",
"name": "/AlarmFlags/TbM2",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 320,
"y": 320,
"wires": [
[
"d45457b5810a9327"
]
]
},
{
"id": "46dff9c084aea665",
"type": "victron-input-custom",
"z": "812b3c1b3d3fa76b",
"service": "com.victronenergy.battery/1",
"path": "/AlarmFlags/Tbm",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/AlarmFlags/Tbm",
"name": "/AlarmFlags/Tbm",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 310,
"y": 260,
"wires": [
[
"c49f4275f033343e"
]
]
},
{
"id": "030d713b96e8cc5e",
"type": "function",
"z": "812b3c1b3d3fa76b",
"name": "Parse_alarms_and_warnings",
"func": "//battery health list\nbattery_health = [];\n\n//alarm list initialization\nTam_list = [];\nTaM2_list=[];\nTbm_list=[];\nTbM2_list=[];\nVBm2_list=[];\nVBM2_list=[];\nIDM2_list=[];\nISOB_list=[];\nMSWE_list=[];\nFUSE_list=[];\nHTRE_list=[];\nTCPE_list=[];\nSTRE_list=[];\nCME_list=[];\nHWFL_list=[];\nHWEM_list=[];\nThM_list=[];\nvsm2_list=[];\nvsM2_list=[];\niCM2_list=[];\niDM2_list=[];\nMID2_list=[];\nHTFS_list=[];\nDATA_list=[];\nLMPA_list=[];\nHEBT_list=[];\n\n//warning list initialization\nTaM1_list=[];\nTbM1_list=[];\nVBm1_list=[];\nVBM1_list=[];\nIDM1_list=[];\nvsm1_list=[];\nvsM1_list=[];\niCM1_list=[];\niDM1_list=[];\nMID1_list=[];\nBLPW_list=[];\nCCBF_list=[];\nAh_W_list=[];\nMPMM_list=[];\nTCdi_list=[];\nLMPW_list=[];\nTOCW_list=[];\n\n//read alarm data\nalarm_Tam = msg.payload.Tam;\nalarm_TaM2 = msg.payload.TaM2;\nalarm_Tbm = msg.payload.Tbm;\nalarm_TbM2 = msg.payload.TbM2;\nalarm_VBm2 = msg.payload.VBm2;\nalarm_VBM2 = msg.payload.VBM2;\nalarm_IDM2 = msg.payload.IDM2;\nalarm_ISOB = msg.payload.ISOB;\nalarm_MSWE = msg.payload.MSWE;\nalarm_FUSE = msg.payload.FUSE;\nalarm_HTRE = msg.payload.HTRE;\nalarm_TCPE = msg.payload.TCPE;\nalarm_STRE = msg.payload.STRE;\nalarm_CME = msg.payload.CME;\nalarm_HWFL = msg.payload.HWFL;\nalarm_HWEM = msg.payload.HWEM;\nalarm_ThM = msg.payload.ThM;\nalarm_vsm2 = msg.payload.vsm2;\nalarm_vsM2 = msg.payload.vsM2;\nalarm_iCM2 = msg.payload.iCM2;\nalarm_iDM2 = msg.payload.iDM2;\nalarm_MID2 = msg.payload.MID2;\nalarm_HTFS = msg.payload.HTFS;\nalarm_DATA = msg.payload.DATA;\nalarm_LMPA = msg.payload.LMPA;\nalarm_HEBT = msg.payload.HEBT;\n\n//read warning data\nwar_TaM1=msg.payload.TaM1;\nwar_TbM1=msg.payload.TbM1;\nwar_VBm1=msg.payload.VBm1;\nwar_VBM1=msg.payload.VBM1;\nwar_IDM1=msg.payload.IDM1;\nwar_vsm1=msg.payload.vsm1;\nwar_vsM1=msg.payload.vsM1;\nwar_iCM1=msg.payload.iCM1;\nwar_iDM1=msg.payload.iDM1;\nwar_MID1=msg.payload.MID1;\nwar_BLPW=msg.payload.BLPW;\nwar_CCBF=msg.payload.CCBF;\nwar_Ah_W=msg.payload.Ah_W;\nwar_MPMM=msg.payload.MPMM;\nwar_TCdi=msg.payload.TCdi;\nwar_LMPW=msg.payload.LMPW;\nwar_TOCW=msg.payload.TOCW;\n\n//equals to the number of battery\nn=alarm_Tam.length;\n\nfor (i = 0; i < n; i++) {\n Tam_list.push(alarm_Tam[i][1][0]);\n TaM2_list.push(alarm_TaM2[i][1][0]);\n Tbm_list.push(alarm_Tbm[i][1][0]);\n TbM2_list.push(alarm_TbM2[i][1][0]);\n VBm2_list.push(alarm_VBm2[i][1][0]);\n VBM2_list.push(alarm_VBM2[i][1][0]);\n IDM2_list.push(alarm_IDM2[i][1][0]);\n ISOB_list.push(alarm_ISOB[i][1][0]);\n MSWE_list.push(alarm_MSWE[i][1][0]);\n FUSE_list.push(alarm_FUSE[i][1][0]);\n HTRE_list.push(alarm_HTRE[i][1][0]);\n TCPE_list.push(alarm_TCPE[i][1][0]);\n STRE_list.push(alarm_STRE[i][1][0]);\n CME_list.push(alarm_CME[i][1][0]);\n HWFL_list.push(alarm_HWFL[i][1][0]);\n HWEM_list.push(alarm_HWEM[i][1][0]);\n ThM_list.push(alarm_ThM[i][1][0]);\n vsm2_list.push(alarm_vsm2[i][1][0]);\n vsM2_list.push(alarm_vsM2[i][1][0]);\n iCM2_list.push(alarm_iCM2[i][1][0]);\n iDM2_list.push(alarm_iDM2[i][1][0]);\n MID2_list.push(alarm_MID2[i][1][0]);\n HTFS_list.push(alarm_HTFS[i][1][0]);\n DATA_list.push(alarm_DATA[i][1][0]);\n LMPA_list.push(alarm_LMPA[i][1][0]);\n HEBT_list.push(alarm_HEBT[i][1][0]);\n \n TaM1_list.push(war_TaM1[i][1][0]);\n TbM1_list.push(war_TbM1[i][1][0]);\n VBm1_list.push(war_VBm1[i][1][0]);\n VBM1_list.push(war_VBM1[i][1][0]);\n IDM1_list.push(war_IDM1[i][1][0]);\n vsm1_list.push(war_vsm1[i][1][0]);\n vsM1_list.push(war_vsM1[i][1][0]);\n iCM1_list.push(war_iCM1[i][1][0]);\n iDM1_list.push(war_iDM1[i][1][0]);\n MID1_list.push(war_TaM1[i][1][0]);\n BLPW_list.push(war_BLPW[i][1][0]);\n CCBF_list.push(war_CCBF[i][1][0]);\n Ah_W_list.push(war_Ah_W[i][1][0]);\n MPMM_list.push(war_MPMM[i][1][0]);\n TCdi_list.push(war_TCdi[i][1][0]);\n LMPW_list.push(war_LMPW[i][1][0]);\n TOCW_list.push(war_TOCW[i][1][0]);\n}\n\nif(Tam_list.includes(\"true\")){\n battery_health.push(\"Recoverable: BMS temperature too low\");\n}else if(TaM2_list.includes(\"true\")){\n battery_health.push(\"Recoverable: BMS temperature too high\");\n}else if(Tbm_list.includes(\"true\")){\n battery_health.push(\"Recoverable: Battery temperature too low\");\n}else if(TbM2_list.includes(\"true\")){\n battery_health.push(\"Recoverable: Battery temperature too high\");\n}else if(VBm2_list.includes(\"true\")){\n battery_health.push(\"Recoverable: Bus voltage too low\");\n}else if(VBM2_list.includes(\"true\")){\n battery_health.push(\"Recoverable: Bus voltage too high\");\n}else if(IDM2_list.includes(\"true\")){\n battery_health.push(\"Recoverable: Discharge current too high\");\n}else if(ISOB_list.includes(\"true\")){\n battery_health.push(\"Unrecoverable: Electrical insulation failure\");\n}else if(MSWE_list.includes(\"true\")){\n battery_health.push(\"Unrecoverable: Main switch failure\");\n}else if(FUSE_list.includes(\"true\")){\n battery_health.push(\"Unrecoverable: Main fuse blown\");\n}else if(HTRE_list.includes(\"true\")){\n battery_health.push(\"Recoverable: Battery failed to warm up\");\n}else if(TCPE_list.includes(\"true\")){\n battery_health.push(\"Unrecoverable: Temperature sensor failure\");\n}else if(STRE_list.includes(\"true\")){\n battery_health.push(\"Recoverable: Voltage measurement circuit fails\");\n}else if(CME_list.includes(\"true\")){\n battery_health.push(\"Recoverable: Current sensor failure\");\n}else if(HWFL_list.includes(\"true\")){\n battery_health.push(\"Recoverable: BMS hardware failure\");\n}else if(HWEM_list.includes(\"true\")){\n battery_health.push(\"Recoverable: Hardware protection tripped\");\n}else if(ThM_list.includes(\"true\")){\n battery_health.push(\"Recoverable: Heatsink temperature too high\");\n}else if(vsm2_list.includes(\"true\")){\n battery_health.push(\"Unrecoverable: Low string voltage failure\");\n}else if(vsM2_list.includes(\"true\")){\n battery_health.push(\"Recoverable: String voltage too high\");\n}else if(iCM2_list.includes(\"true\")){\n battery_health.push(\"Unrecoverable: Charge current too high\");\n}else if(iDM2_list.includes(\"true\")){\n battery_health.push(\"Recoverable: Discharge current too high\");\n}else if(MID2_list.includes(\"true\")){\n battery_health.push(\"Recoverable: String voltage unbalance too high\");\n}else if(HTFS_list.includes(\"true\")){\n battery_health.push(\"Unrecoverable: Heater Fuse Blown\");\n}else if(DATA_list.includes(\"true\")){\n battery_health.push(\"Unrecoverable: Parameters out of range\");\n}else if(LMPA_list.includes(\"true\")){\n battery_health.push(\"Unrecoverable: String voltages unbalance alarm\");\n}else if(HEBT_list.includes(\"true\")){\n battery_health.push(\"Recoverable: Loss of heartbeat\");\n}else if(TaM1_list.includes(\"true\")){\n battery_health.push(\"Warning: BMS temperature high\");\n}else if(TbM1_list.includes(\"true\")){\n battery_health.push(\"Warning: Battery temperature high\");\n}else if(VBm1_list.includes(\"true\")){\n battery_health.push(\"Warning: Bus voltage low\");\n}else if(VBM1_list.includes(\"true\")){\n battery_health.push(\"Warning: Bus voltage high\");\n}else if(IDM1_list.includes(\"true\")){\n battery_health.push(\"Warning: Discharge current high\");\n}else if(vsm1_list.includes(\"true\")){\n battery_health.push(\"Warning: String voltage too low\");\n}else if(vsM1_list.includes(\"true\")){\n battery_health.push(\"Warning: String voltage high\");\n}else if(iCM1_list.includes(\"true\")){\n battery_health.push(\"Warning: Charge current high\");\n}else if(iDM1_list.includes(\"true\")){\n battery_health.push(\"Warning: Discharge current high\");\n}else if(MID1_list.includes(\"true\")){\n battery_health.push(\"Warning: String voltages unbalanced\");\n}else if(BLPW_list.includes(\"true\")){\n battery_health.push(\"Warning: Not enough charging power on bus\");\n}else if(CCBF_list.includes(\"true\")){\n battery_health.push(\"Warning: Internal charger hardware failure\");\n}else if(Ah_W_list.includes(\"true\")){\n battery_health.push(\"Warning: String SOC low\");\n}else if(MPMM_list.includes(\"true\")){\n battery_health.push(\"Warning: Midpoint wiring problem\");\n}else if(TCdi_list.includes(\"true\")){\n battery_health.push(\"Warning: Temperature difference between strings high\");\n}else if(LMPW_list.includes(\"true\")){\n battery_health.push(\"Warning: String voltages unbalance warning\");\n}else if(TOCW_list.includes(\"true\")){\n battery_health.push(\"Warning: Top of Charge requested\");\n}else{\n battery_health.push(\"No warning and no alarm\")\n}\n\nmsg.payload = battery_health;\nreturn msg;",
"outputs": 1,
"timeout": 0,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 1220,
"y": 1700,
"wires": [
[
"31d2ccfc88f34577"
]
]
},
{
"id": "894cd30780eeff13",
"type": "change",
"z": "812b3c1b3d3fa76b",
"name": "Tam",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "Tam",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 550,
"y": 140,
"wires": [
[
"a81c3a74b362e5f6"
]
]
},
{
"id": "a81c3a74b362e5f6",
"type": "join",
"z": "812b3c1b3d3fa76b",
"name": "",
"mode": "custom",
"build": "object",
"property": "payload",
"propertyType": "msg",
"key": "topic",
"joiner": "\\n",
"joinerType": "str",
"accumulate": true,
"timeout": "",
"count": "43",
"reduceRight": false,
"reduceExp": "",
"reduceInit": "",
"reduceInitType": "",
"reduceFixup": "",
"x": 980,
"y": 1700,
"wires": [
[
"030d713b96e8cc5e"
]
]
},
{
"id": "3f6cc0eea8917fc6",
"type": "change",
"z": "812b3c1b3d3fa76b",
"name": "TaM2",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "TaM2",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 550,
"y": 200,
"wires": [
[
"a81c3a74b362e5f6"
]
]
},
{
"id": "31d2ccfc88f34577",
"type": "ui_text",
"z": "812b3c1b3d3fa76b",
"group": "e177392401620838",
"order": 4,
"width": 0,
"height": 0,
"name": "",
"label": "Warnings and Alarms",
"format": "{{msg.payload}}",
"layout": "row-spread",
"className": "",
"style": false,
"font": "Arial,Arial,Helvetica,sans-serif",
"fontSize": "20",
"color": "#000000",
"x": 1520,
"y": 1700,
"wires": []
},
{
"id": "c49f4275f033343e",
"type": "change",
"z": "812b3c1b3d3fa76b",
"name": "Tbm",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "Tbm",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 550,
"y": 260,
"wires": [
[
"a81c3a74b362e5f6"
]
]
},
{
"id": "994d8e0ea718bc6d",
"type": "victron-input-custom",
"z": "812b3c1b3d3fa76b",
"service": "com.victronenergy.battery/1",
"path": "/AlarmFlags/VBm2",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/AlarmFlags/VBm2",
"name": "/AlarmFlags/VBm2",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 320,
"y": 380,
"wires": [
[
"18bd214be6e83186"
]
]
},
{
"id": "bfe694db786e0b7b",
"type": "victron-input-custom",
"z": "812b3c1b3d3fa76b",
"service": "com.victronenergy.battery/1",
"path": "/AlarmFlags/VBM2",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/AlarmFlags/VBM2",
"name": "/AlarmFlags/VBM2",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 320,
"y": 440,
"wires": [
[
"0fbc9bb6fb67ec89"
]
]
},
{
"id": "09eb3b6ca994d987",
"type": "victron-input-custom",
"z": "812b3c1b3d3fa76b",
"service": "com.victronenergy.battery/1",
"path": "/AlarmFlags/ThM",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/AlarmFlags/ThM",
"name": "/AlarmFlags/ThM",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 310,
"y": 1100,
"wires": [
[
"1b1f83e8b2991535"
]
]
},
{
"id": "1de58d8c4751e1be",
"type": "victron-input-custom",
"z": "812b3c1b3d3fa76b",
"service": "com.victronenergy.battery/1",
"path": "/AlarmFlags/vsm2",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/AlarmFlags/vsm2",
"name": "/AlarmFlags/vsm2",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 310,
"y": 1160,
"wires": [
[
"1b0e39d1628ab7bd"
]
]
},
{
"id": "ec723389362c7503",
"type": "victron-input-custom",
"z": "812b3c1b3d3fa76b",
"service": "com.victronenergy.battery/1",
"path": "/AlarmFlags/vsM2",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/AlarmFlags/vsM2",
"name": "/AlarmFlags/vsM2",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 310,
"y": 1220,
"wires": [
[
"c7ecd3f162a8522d"
]
]
},
{
"id": "112f05465eebdf01",
"type": "victron-input-custom",
"z": "812b3c1b3d3fa76b",
"service": "com.victronenergy.battery/1",
"path": "/AlarmFlags/iCM2",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/AlarmFlags/iCM2",
"name": "/AlarmFlags/iCM2",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 310,
"y": 1280,
"wires": [
[
"755ac176bd905084"
]
]
},
{
"id": "72455b894e977db6",
"type": "victron-input-custom",
"z": "812b3c1b3d3fa76b",
"service": "com.victronenergy.battery/1",
"path": "/AlarmFlags/iDM2",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/AlarmFlags/iDM2",
"name": "/AlarmFlags/iDM2",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 310,
"y": 1340,
"wires": [
[
"c8d63cbf665caf02"
]
]
},
{
"id": "d45457b5810a9327",
"type": "change",
"z": "812b3c1b3d3fa76b",
"name": "TbM2",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "TbM2",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 550,
"y": 320,
"wires": [
[
"a81c3a74b362e5f6"
]
]
},
{
"id": "18bd214be6e83186",
"type": "change",
"z": "812b3c1b3d3fa76b",
"name": "VBm2",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "VBm2",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 550,
"y": 380,
"wires": [
[
"a81c3a74b362e5f6"
]
]
},
{
"id": "0fbc9bb6fb67ec89",
"type": "change",
"z": "812b3c1b3d3fa76b",
"name": "VBM2",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "VBM2",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 550,
"y": 440,
"wires": [
[
"a81c3a74b362e5f6"
]
]
},
{
"id": "4f4f5ad0a98541db",
"type": "change",
"z": "812b3c1b3d3fa76b",
"name": "IDM2",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "IDM2",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 550,
"y": 500,
"wires": [
[
"a81c3a74b362e5f6"
]
]
},
{
"id": "23008a02e8e7da76",
"type": "change",
"z": "812b3c1b3d3fa76b",
"name": "ISOB",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "ISOB",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 550,
"y": 560,
"wires": [
[
"a81c3a74b362e5f6"
]
]
},
{
"id": "e104c979769c9e92",
"type": "change",
"z": "812b3c1b3d3fa76b",
"name": "MSWE",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "MSWE",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 560,
"y": 620,
"wires": [
[
"a81c3a74b362e5f6"
]
]
},
{
"id": "f3e5be9d70303fd9",
"type": "change",
"z": "812b3c1b3d3fa76b",
"name": "FUSE",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "FUSE",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 550,
"y": 680,
"wires": [
[
"a81c3a74b362e5f6"
]
]
},
{
"id": "c54215196b096586",
"type": "change",
"z": "812b3c1b3d3fa76b",
"name": "HTRE",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "HTRE",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 550,
"y": 740,
"wires": [
[
"a81c3a74b362e5f6"
]
]
},
{
"id": "9603499ff1d02af5",
"type": "change",
"z": "812b3c1b3d3fa76b",
"name": "TCPE",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "TCPE",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 550,
"y": 800,
"wires": [
[
"a81c3a74b362e5f6"
]
]
},
{
"id": "00b4380b1ae68023",
"type": "change",
"z": "812b3c1b3d3fa76b",
"name": "STRE",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "STRE",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 550,
"y": 860,
"wires": [
[
"a81c3a74b362e5f6"
]
]
},
{
"id": "644fd6453eeca4be",
"type": "change",
"z": "812b3c1b3d3fa76b",
"name": "CME",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "CME",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 550,
"y": 920,
"wires": [
[
"a81c3a74b362e5f6"
]
]
},
{
"id": "478c1c46dcd45a31",
"type": "change",
"z": "812b3c1b3d3fa76b",
"name": "HWFL",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "HWFL",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 550,
"y": 980,
"wires": [
[
"a81c3a74b362e5f6"
]
]
},
{
"id": "8f8fd0429cee609e",
"type": "change",
"z": "812b3c1b3d3fa76b",
"name": "HWEM",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "HWEM",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 560,
"y": 1040,
"wires": [
[
"a81c3a74b362e5f6"
]
]
},
{
"id": "1b1f83e8b2991535",
"type": "change",
"z": "812b3c1b3d3fa76b",
"name": "ThM",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "ThM",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 550,
"y": 1100,
"wires": [
[
"a81c3a74b362e5f6"
]
]
},
{
"id": "1b0e39d1628ab7bd",
"type": "change",
"z": "812b3c1b3d3fa76b",
"name": "vsm2",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "vsm2",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 550,
"y": 1160,
"wires": [
[
"a81c3a74b362e5f6"
]
]
},
{
"id": "c7ecd3f162a8522d",
"type": "change",
"z": "812b3c1b3d3fa76b",
"name": "vsM2",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "vsM2",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 550,
"y": 1220,
"wires": [
[
"a81c3a74b362e5f6"
]
]
},
{
"id": "755ac176bd905084",
"type": "change",
"z": "812b3c1b3d3fa76b",
"name": "iCM2",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "iCM2",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 550,
"y": 1280,
"wires": [
[
"a81c3a74b362e5f6"
]
]
},
{
"id": "c8d63cbf665caf02",
"type": "change",
"z": "812b3c1b3d3fa76b",
"name": "iDM2",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "iDM2",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 550,
"y": 1340,
"wires": [
[
"a81c3a74b362e5f6"
]
]
},
{
"id": "943a0ba24db0fab4",
"type": "change",
"z": "812b3c1b3d3fa76b",
"name": "MID2",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "MID2",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 550,
"y": 1380,
"wires": [
[
"a81c3a74b362e5f6"
]
]
},
{
"id": "e996de028f2a9e80",
"type": "change",
"z": "812b3c1b3d3fa76b",
"name": "HTFS",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "HTFS",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 550,
"y": 1440,
"wires": [
[
"a81c3a74b362e5f6"
]
]
},
{
"id": "30d43b7beebf9bb9",
"type": "change",
"z": "812b3c1b3d3fa76b",
"name": "DATA",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "DATA",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 550,
"y": 1480,
"wires": [
[
"a81c3a74b362e5f6"
]
]
},
{
"id": "87e8ae20b843c381",
"type": "change",
"z": "812b3c1b3d3fa76b",
"name": "LMPA",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "LMPA",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 550,
"y": 1540,
"wires": [
[
"a81c3a74b362e5f6"
]
]
},
{
"id": "b22ce8dbee5ca745",
"type": "change",
"z": "812b3c1b3d3fa76b",
"name": "HEBT",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "HEBT",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 550,
"y": 1580,
"wires": [
[
"a81c3a74b362e5f6"
]
]
},
{
"id": "4b522112c9a3e00e",
"type": "victron-input-custom",
"z": "812b3c1b3d3fa76b",
"service": "com.victronenergy.battery/1",
"path": "/WarningFlags/TaM1",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/WarningFlags/TaM1",
"name": "/WarningFlags/TaM1",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 320,
"y": 1700,
"wires": [
[
"d51013c9024393c2"
]
]
},
{
"id": "0b0601f7912f4ded",
"type": "comment",
"z": "812b3c1b3d3fa76b",
"name": "Parse Warnings: 17",
"info": "",
"x": 250,
"y": 1660,
"wires": []
},
{
"id": "b04314be6aa4d486",
"type": "victron-input-custom",
"z": "812b3c1b3d3fa76b",
"service": "com.victronenergy.battery/1",
"path": "/WarningFlags/TbM1",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/WarningFlags/TbM1",
"name": "/WarningFlags/TbM1",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 320,
"y": 1760,
"wires": [
[
"44369ffe6af08526"
]
]
},
{
"id": "dd9526f3fae49939",
"type": "victron-input-custom",
"z": "812b3c1b3d3fa76b",
"service": "com.victronenergy.battery/1",
"path": "/WarningFlags/VBm1",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/WarningFlags/VBm1",
"name": "/WarningFlags/VBm1",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 320,
"y": 1820,
"wires": [
[
"9a0ad343ba27a8d8"
]
]
},
{
"id": "927c6342055e28b3",
"type": "victron-input-custom",
"z": "812b3c1b3d3fa76b",
"service": "com.victronenergy.battery/1",
"path": "/WarningFlags/VBM1",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/WarningFlags/VBM1",
"name": "/WarningFlags/VBM1",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 320,
"y": 1880,
"wires": [
[
"e77dad2d329159c7"
]
]
},
{
"id": "9faf41489bfa5cb7",
"type": "victron-input-custom",
"z": "812b3c1b3d3fa76b",
"service": "com.victronenergy.battery/1",
"path": "/WarningFlags/IDM1",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/WarningFlags/IDM1",
"name": "/WarningFlags/IDM1",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 320,
"y": 1940,
"wires": [
[
"40f85c56d33f4c07"
]
]
},
{
"id": "69cd4e171b1e45f4",
"type": "victron-input-custom",
"z": "812b3c1b3d3fa76b",
"service": "com.victronenergy.battery/1",
"path": "/WarningFlags/vsm1",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/WarningFlags/vsm1",
"name": "/WarningFlags/vsm1",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 320,
"y": 2000,
"wires": [
[
"0e04636407a5958a"
]
]
},
{
"id": "9b2ed9f2d58f6366",
"type": "victron-input-custom",
"z": "812b3c1b3d3fa76b",
"service": "com.victronenergy.battery/1",
"path": "/WarningFlags/vsM1",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/WarningFlags/vsM1",
"name": "/WarningFlags/vsM1",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 320,
"y": 2060,
"wires": [
[
"f8aeb00b6b7b7507"
]
]
},
{
"id": "d9809a44cf6f943d",
"type": "victron-input-custom",
"z": "812b3c1b3d3fa76b",
"service": "com.victronenergy.battery/1",
"path": "/WarningFlags/iCM1",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/WarningFlags/iCM1",
"name": "/WarningFlags/iCM1",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 320,
"y": 2120,
"wires": [
[
"9e849ea69b4c800c"
]
]
},
{
"id": "e96a379add9c8cf7",
"type": "victron-input-custom",
"z": "812b3c1b3d3fa76b",
"service": "com.victronenergy.battery/1",
"path": "/WarningFlags/iDM1",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/WarningFlags/iDM1",
"name": "/WarningFlags/iDM1",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 320,
"y": 2180,
"wires": [
[
"b6c5033f770dd82e"
]
]
},
{
"id": "8af913c74e11c847",
"type": "victron-input-custom",
"z": "812b3c1b3d3fa76b",
"service": "com.victronenergy.battery/1",
"path": "/WarningFlags/MID1",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/WarningFlags/MID1",
"name": "/WarningFlags/MID1",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 320,
"y": 2240,
"wires": [
[
"d7023b57a6070ec2"
]
]
},
{
"id": "7804c68a85f2d79d",
"type": "victron-input-custom",
"z": "812b3c1b3d3fa76b",
"service": "com.victronenergy.battery/1",
"path": "/WarningFlags/BLPW",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/WarningFlags/BLPW",
"name": "/WarningFlags/BLPW",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 320,
"y": 2300,
"wires": [
[
"1e50dc0d0b135ae7"
]
]
},
{
"id": "f6c2902c5b53eff4",
"type": "victron-input-custom",
"z": "812b3c1b3d3fa76b",
"service": "com.victronenergy.battery/1",
"path": "/WarningFlags/CCBF",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/WarningFlags/CCBF",
"name": "/WarningFlags/CCBF",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 320,
"y": 2360,
"wires": [
[
"8a84c7dd92f14c6c"
]
]
},
{
"id": "fab0d9eba4a64aac",
"type": "victron-input-custom",
"z": "812b3c1b3d3fa76b",
"service": "com.victronenergy.battery/1",
"path": "/WarningFlags/Ah_W",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/WarningFlags/Ah_W",
"name": "/WarningFlags/Ah_W",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 320,
"y": 2420,
"wires": [
[
"5e1d4266f1aca1b2"
]
]
},
{
"id": "b475f90f9e578717",
"type": "victron-input-custom",
"z": "812b3c1b3d3fa76b",
"service": "com.victronenergy.battery/1",
"path": "/WarningFlags/MPMM",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/WarningFlags/MPMM",
"name": "/WarningFlags/MPMM",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 330,
"y": 2480,
"wires": [
[
"bffcd0ca2610ae9d"
]
]
},
{
"id": "f6c914a6970ff165",
"type": "victron-input-custom",
"z": "812b3c1b3d3fa76b",
"service": "com.victronenergy.battery/1",
"path": "/WarningFlags/TCdi",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/WarningFlags/TCdi",
"name": "/WarningFlags/TCdi",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 320,
"y": 2540,
"wires": [
[
"2f1ff34c055b36ca"
]
]
},
{
"id": "2e8241d774096460",
"type": "victron-input-custom",
"z": "812b3c1b3d3fa76b",
"service": "com.victronenergy.battery/1",
"path": "/WarningFlags/LMPW",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/WarningFlags/LMPW",
"name": "/WarningFlags/LMPW",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 330,
"y": 2600,
"wires": [
[
"7ddee613ebbb38a7"
]
]
},
{
"id": "cce2f7beba26a94e",
"type": "victron-input-custom",
"z": "812b3c1b3d3fa76b",
"service": "com.victronenergy.battery/1",
"path": "/WarningFlags/TOCW",
"serviceObj": {
"service": "com.victronenergy.battery/1",
"name": "FZS 48TL200 x2 (1)"
},
"pathObj": {
"path": "/WarningFlags/TOCW",
"name": "/WarningFlags/TOCW",
"type": "object"
},
"name": "",
"onlyChanges": false,
"x": 330,
"y": 2660,
"wires": [
[
"b7e75846443cc632"
]
]
},
{
"id": "d51013c9024393c2",
"type": "change",
"z": "812b3c1b3d3fa76b",
"name": "TaM1",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "TaM1",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 550,
"y": 1700,
"wires": [
[
"a81c3a74b362e5f6"
]
]
},
{
"id": "44369ffe6af08526",
"type": "change",
"z": "812b3c1b3d3fa76b",
"name": "TbM1",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "TbM1",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 550,
"y": 1760,
"wires": [
[
"a81c3a74b362e5f6"
]
]
},
{
"id": "9a0ad343ba27a8d8",
"type": "change",
"z": "812b3c1b3d3fa76b",
"name": "VBm1",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "VBm1",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 550,
"y": 1820,
"wires": [
[
"a81c3a74b362e5f6"
]
]
},
{
"id": "e77dad2d329159c7",
"type": "change",
"z": "812b3c1b3d3fa76b",
"name": "VBM1",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "VBM1",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 550,
"y": 1880,
"wires": [
[
"a81c3a74b362e5f6"
]
]
},
{
"id": "40f85c56d33f4c07",
"type": "change",
"z": "812b3c1b3d3fa76b",
"name": "IDM1",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "IDM1",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 550,
"y": 1940,
"wires": [
[
"a81c3a74b362e5f6"
]
]
},
{
"id": "0e04636407a5958a",
"type": "change",
"z": "812b3c1b3d3fa76b",
"name": "vsm1",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "vsm1",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 550,
"y": 2000,
"wires": [
[
"a81c3a74b362e5f6"
]
]
},
{
"id": "f8aeb00b6b7b7507",
"type": "change",
"z": "812b3c1b3d3fa76b",
"name": "vsM1",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "vsM1",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 550,
"y": 2060,
"wires": [
[
"a81c3a74b362e5f6"
]
]
},
{
"id": "9e849ea69b4c800c",
"type": "change",
"z": "812b3c1b3d3fa76b",
"name": "iCM1",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "iCM1",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 550,
"y": 2120,
"wires": [
[
"a81c3a74b362e5f6"
]
]
},
{
"id": "b6c5033f770dd82e",
"type": "change",
"z": "812b3c1b3d3fa76b",
"name": "iDM1",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "iDM1",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 550,
"y": 2180,
"wires": [
[
"a81c3a74b362e5f6"
]
]
},
{
"id": "d7023b57a6070ec2",
"type": "change",
"z": "812b3c1b3d3fa76b",
"name": "MID1",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "MID1",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 550,
"y": 2240,
"wires": [
[
"a81c3a74b362e5f6"
]
]
},
{
"id": "1e50dc0d0b135ae7",
"type": "change",
"z": "812b3c1b3d3fa76b",
"name": "BLPW",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "BLPW",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 550,
"y": 2300,
"wires": [
[
"a81c3a74b362e5f6"
]
]
},
{
"id": "8a84c7dd92f14c6c",
"type": "change",
"z": "812b3c1b3d3fa76b",
"name": "CCBF",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "CCBF",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 550,
"y": 2360,
"wires": [
[
"a81c3a74b362e5f6"
]
]
},
{
"id": "5e1d4266f1aca1b2",
"type": "change",
"z": "812b3c1b3d3fa76b",
"name": "Ah_W",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "Ah_W",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 550,
"y": 2420,
"wires": [
[
"a81c3a74b362e5f6"
]
]
},
{
"id": "bffcd0ca2610ae9d",
"type": "change",
"z": "812b3c1b3d3fa76b",
"name": "MPMM",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "MPMM",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 580,
"y": 2480,
"wires": [
[
"a81c3a74b362e5f6"
]
]
},
{
"id": "2f1ff34c055b36ca",
"type": "change",
"z": "812b3c1b3d3fa76b",
"name": "TCdi",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "TCdi",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 550,
"y": 2540,
"wires": [
[
"a81c3a74b362e5f6"
]
]
},
{
"id": "7ddee613ebbb38a7",
"type": "change",
"z": "812b3c1b3d3fa76b",
"name": "LMPW",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "LMPW",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 570,
"y": 2600,
"wires": [
[
"a81c3a74b362e5f6"
]
]
},
{
"id": "b7e75846443cc632",
"type": "change",
"z": "812b3c1b3d3fa76b",
"name": "TOCW",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "TOCW",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 570,
"y": 2660,
"wires": [
[
"a81c3a74b362e5f6"
]
]
},
{
"id": "b24e3f9e55310caa",
"type": "ui_text_input",
"z": "dd75eef8547a776f",
"name": "Grid Setpoint",
"label": "Grid Setpoint",
"tooltip": "",
"group": "3290bd5996bd3175",
"order": 1,
"width": 0,
"height": 0,
"passthru": true,
"mode": "number",
"delay": "0",
"topic": "topic",
"sendOnBlur": false,
"className": "",
"topicType": "msg",
"x": 710,
"y": 320,
"wires": [
[
"c0d1f3cc766406f9"
]
]
},
{
"id": "c0d1f3cc766406f9",
"type": "victron-output-custom",
"z": "dd75eef8547a776f",
"service": "com.victronenergy.settings",
"path": "/Settings/CGwacs/AcPowerSetPoint",
"serviceObj": {
"service": "com.victronenergy.settings",
"name": "com.victronenergy.settings"
},
"pathObj": {
"path": "/Settings/CGwacs/AcPowerSetPoint",
"name": "/Settings/CGwacs/AcPowerSetPoint",
"type": "number"
},
"name": "",
"onlyChanges": false,
"x": 1070,
"y": 320,
"wires": []
},
{
"id": "7aa9ca6b5a7a4b84",
"type": "victron-input-custom",
"z": "dd75eef8547a776f",
"service": "com.victronenergy.settings",
"path": "/Settings/CGwacs/AcPowerSetPoint",
"serviceObj": {
"service": "com.victronenergy.settings",
"name": "com.victronenergy.settings"
},
"pathObj": {
"path": "/Settings/CGwacs/AcPowerSetPoint",
"name": "/Settings/CGwacs/AcPowerSetPoint",
"type": "number"
},
"name": "",
"onlyChanges": true,
"x": 350,
"y": 320,
"wires": [
[
"b24e3f9e55310caa"
]
]
},
{
"id": "351a4c8e3b05e80b",
"type": "victron-input-custom",
"z": "dd75eef8547a776f",
"service": "com.victronenergy.settings",
"path": "/Settings/CGwacs/BatteryLife/MinimumSocLimit",
"serviceObj": {
"service": "com.victronenergy.settings",
"name": "com.victronenergy.settings"
},
"pathObj": {
"path": "/Settings/CGwacs/BatteryLife/MinimumSocLimit",
"name": "/Settings/CGwacs/BatteryLife/MinimumSocLimit",
"type": "number"
},
"name": "",
"onlyChanges": true,
"x": 390,
"y": 380,
"wires": [
[
"ccfa1e9e74d45f5d"
]
]
},
{
"id": "ccfa1e9e74d45f5d",
"type": "ui_text_input",
"z": "dd75eef8547a776f",
"name": "Min SOC",
"label": "Min SOC",
"tooltip": "",
"group": "3290bd5996bd3175",
"order": 2,
"width": 0,
"height": 0,
"passthru": true,
"mode": "number",
"delay": "0",
"topic": "topic",
"sendOnBlur": false,
"className": "",
"topicType": "msg",
"x": 760,
"y": 380,
"wires": [
[
"11baf8f4cdfc9eed"
]
]
},
{
"id": "11baf8f4cdfc9eed",
"type": "victron-output-custom",
"z": "dd75eef8547a776f",
"service": "com.victronenergy.settings",
"path": "/Settings/CGwacs/BatteryLife/MinimumSocLimit",
"serviceObj": {
"service": "com.victronenergy.settings",
"name": "com.victronenergy.settings"
},
"pathObj": {
"path": "/Settings/CGwacs/BatteryLife/MinimumSocLimit",
"name": "/Settings/CGwacs/BatteryLife/MinimumSocLimit",
"type": "number"
},
"name": "",
"onlyChanges": false,
"x": 1130,
"y": 380,
"wires": []
},
{
"id": "6397816a6019c94c",
"type": "ui_template",
"z": "dd75eef8547a776f",
"group": "e177392401620838",
"name": "Battery Monitor",
"order": 5,
"width": 0,
"height": 0,
"format": "<a href=\"https://monitor.innov.energy/salidomo_installations/list/\" target=\"_blank\" class=\"button\"> Battery Monitor </a>\n",
"storeOutMessages": true,
"fwdInMessages": true,
"resendOnRefresh": true,
"templateScope": "local",
"className": "",
"x": 200,
"y": 480,
"wires": [
[]
],
"icon": "node-red/arrow-in.svg"
}
]