Files
cariflex/tools/EVerest-main/config/nodered/config-sil-energy-management-flow.json
Eric F d398a6ced2 Add extracted tools: CitrineOS, OpenOCPP, ShapeShifter
- CitrineOS core extracted (CSMS OCPP 2.0.1)
- OpenOCPP extracted (firmware OCPP 1.6J/2.0.1)
- ShapeShifter library installed (pip install -e)
- ShapeShifter specification extracted
- EVerest extracted

TODO updated with progress
2026-06-08 00:38:27 -04:00

2957 lines
74 KiB
JSON

[
{
"id": "9aafbf849d4d6e12",
"type": "tab",
"label": "Debug",
"disabled": false,
"info": ""
},
{
"id": "ed603c51db9dcbb9",
"type": "tab",
"label": "Connector 1",
"disabled": false,
"info": ""
},
{
"id": "aa273dc8b2748caa",
"type": "tab",
"label": "Connector 2",
"disabled": false,
"info": "",
"env": []
},
{
"id": "af1e1eeac9c4b704",
"type": "group",
"z": "ed603c51db9dcbb9",
"style": {
"stroke": "#999999",
"stroke-opacity": "1",
"fill": "none",
"fill-opacity": "1",
"label": true,
"label-position": "nw",
"color": "#a4a4a4"
},
"nodes": [
"1295e032d7ddbc20"
],
"x": 1114,
"y": 439,
"w": 152,
"h": 82
},
{
"id": "1fde85c123a85efb",
"type": "group",
"z": "aa273dc8b2748caa",
"style": {
"stroke": "#999999",
"stroke-opacity": "1",
"fill": "none",
"fill-opacity": "1",
"label": true,
"label-position": "nw",
"color": "#a4a4a4"
},
"nodes": [
"55cc973dd820527b"
],
"x": 1074,
"y": 419,
"w": 152,
"h": 82
},
{
"id": "7140803fb3989089",
"type": "ui_base",
"theme": {
"name": "theme-custom",
"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": true,
"reset": false
},
"customTheme": {
"name": "EVerest",
"default": "#4B7930",
"baseColor": "#2a62ac",
"baseFont": "-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif",
"reset": false
},
"themeState": {
"base-color": {
"default": "#2a62ac",
"value": "#2a62ac",
"edited": true
},
"page-titlebar-backgroundColor": {
"value": "#2a62ac",
"edited": false
},
"page-backgroundColor": {
"value": "#111111",
"edited": false
},
"page-sidebar-backgroundColor": {
"value": "#333333",
"edited": false
},
"group-textColor": {
"value": "#4f88d4",
"edited": false
},
"group-borderColor": {
"value": "#555555",
"edited": false
},
"group-backgroundColor": {
"value": "#333333",
"edited": false
},
"widget-textColor": {
"value": "#eeeeee",
"edited": false
},
"widget-backgroundColor": {
"value": "#2a62ac",
"edited": false
},
"widget-borderColor": {
"value": "#333333",
"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": "EVerest",
"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": 6,
"py": 6
}
}
},
{
"id": "fc8686af.48d178",
"type": "mqtt-broker",
"name": "",
"broker": "localhost",
"port": "1883",
"clientid": "",
"usetls": false,
"protocolVersion": "4",
"keepalive": "60",
"cleansession": true,
"birthTopic": "",
"birthQos": "0",
"birthPayload": "",
"birthMsg": {},
"closeTopic": "",
"closeQos": "0",
"closePayload": "",
"closeMsg": {},
"willTopic": "",
"willQos": "0",
"willPayload": "",
"willMsg": {},
"sessionExpiry": ""
},
{
"id": "5e36140d.127f1c",
"type": "ui_group",
"name": "PowerMeter",
"tab": "50c487c1.27e508",
"order": 2,
"disp": true,
"width": "6",
"collapse": false
},
{
"id": "ebbb0e3f.53fbf",
"type": "ui_group",
"name": "Actions",
"tab": "50c487c1.27e508",
"order": 2,
"disp": true,
"width": "6",
"collapse": false
},
{
"id": "1709edaf.162962",
"type": "ui_group",
"name": "Debug",
"tab": "50c487c1.27e508",
"order": 3,
"disp": true,
"width": "6",
"collapse": false
},
{
"id": "8d6f402b.8f007",
"type": "ui_group",
"name": "KeepAlive",
"tab": "50c487c1.27e508",
"order": 5,
"disp": true,
"width": "6",
"collapse": false
},
{
"id": "1ebee360.265b5d",
"type": "ui_group",
"name": "PowerMeter",
"tab": "50c487c1.27e508",
"order": 6,
"disp": true,
"width": "6",
"collapse": false
},
{
"id": "d3f19d5c.593e5",
"type": "ui_group",
"name": "State",
"tab": "50c487c1.27e508",
"order": 4,
"disp": true,
"width": "6",
"collapse": false
},
{
"id": "b364f7eb4621082b",
"type": "ui_group",
"name": "Connector 1 [ISO15118]",
"tab": "d3ada9fa4cf6ac53",
"order": 2,
"disp": true,
"width": "6",
"collapse": false
},
{
"id": "7cd2ccabb1265f7a",
"type": "ui_group",
"name": "RFID",
"tab": "d3ada9fa4cf6ac53",
"order": 1,
"disp": true,
"width": "6",
"collapse": false
},
{
"id": "21e40a4a97a50168",
"type": "ui_group",
"name": "Connector 2 [Basic Charging]",
"tab": "d3ada9fa4cf6ac53",
"order": 3,
"disp": true,
"width": "6",
"collapse": false
},
{
"id": "50c487c1.27e508",
"type": "ui_tab",
"name": "Debug",
"icon": "fa-fire",
"disabled": false,
"hidden": false
},
{
"id": "d3ada9fa4cf6ac53",
"type": "ui_tab",
"name": "Home",
"icon": "dashboard",
"order": 1,
"disabled": false,
"hidden": false
},
{
"id": "27225dc1005441da",
"type": "ui_spacer",
"z": "9aafbf849d4d6e12",
"name": "spacer",
"group": "27651fee38a05406",
"order": 4,
"width": 1,
"height": 1
},
{
"id": "7120e41583a9165f",
"type": "ui_spacer",
"z": "9aafbf849d4d6e12",
"name": "spacer",
"group": "27651fee38a05406",
"order": 4,
"width": 1,
"height": 1
},
{
"id": "efce370cfc8e4f9b",
"type": "ui_spacer",
"z": "9aafbf849d4d6e12",
"name": "spacer",
"group": "",
"order": 2,
"width": 6,
"height": 1
},
{
"id": "794d727ae2866f12",
"type": "ui_spacer",
"z": "9aafbf849d4d6e12",
"name": "spacer",
"group": "",
"order": 5,
"width": "6",
"height": "1"
},
{
"id": "c8955752ad17f297",
"type": "mqtt in",
"z": "9aafbf849d4d6e12",
"name": "",
"topic": "/external/powermeter/vrmsL1",
"qos": "2",
"datatype": "auto",
"broker": "fc8686af.48d178",
"nl": false,
"rap": true,
"rh": 0,
"inputs": 0,
"x": 180,
"y": 100,
"wires": [
[
"b1d3d31a92c2c68d"
]
]
},
{
"id": "b1d3d31a92c2c68d",
"type": "ui_chart",
"z": "9aafbf849d4d6e12",
"name": "",
"group": "5e36140d.127f1c",
"order": 11,
"width": 0,
"height": 0,
"label": "vrmsL1",
"chartType": "line",
"legend": "false",
"xformat": "HH:mm:ss",
"interpolate": "linear",
"nodata": "",
"dot": false,
"ymin": "",
"ymax": "",
"removeOlder": "60",
"removeOlderPoints": "",
"removeOlderUnit": "1",
"cutout": 0,
"useOneColor": false,
"useUTC": false,
"colors": [
"#1f77b4",
"#aec7e8",
"#ff7f0e",
"#2ca02c",
"#98df8a",
"#d62728",
"#ff9896",
"#9467bd",
"#c5b0d5"
],
"outputs": 1,
"useDifferentColor": false,
"x": 400,
"y": 100,
"wires": [
[]
]
},
{
"id": "a4bef87a56ade625",
"type": "mqtt out",
"z": "9aafbf849d4d6e12",
"name": "",
"topic": "/external/cmd/enable",
"qos": "1",
"retain": "false",
"respTopic": "",
"contentType": "",
"userProps": "",
"correl": "",
"expiry": "",
"broker": "fc8686af.48d178",
"x": 500,
"y": 440,
"wires": []
},
{
"id": "6c1a9684ee9cff1b",
"type": "mqtt out",
"z": "9aafbf849d4d6e12",
"name": "",
"topic": "/external/cmd/disable",
"qos": "1",
"retain": "false",
"respTopic": "",
"contentType": "",
"userProps": "",
"correl": "",
"expiry": "",
"broker": "fc8686af.48d178",
"x": 500,
"y": 480,
"wires": []
},
{
"id": "7b7910abcebe9ea8",
"type": "ui_switch",
"z": "9aafbf849d4d6e12",
"name": "",
"label": "Enabled",
"tooltip": "",
"group": "ebbb0e3f.53fbf",
"order": 5,
"width": 0,
"height": 0,
"passthru": true,
"decouple": "false",
"topic": "topic",
"topicType": "msg",
"style": "",
"onvalue": "true",
"onvalueType": "bool",
"onicon": "",
"oncolor": "",
"offvalue": "false",
"offvalueType": "bool",
"officon": "",
"offcolor": "",
"animate": false,
"x": 120,
"y": 460,
"wires": [
[
"f68fa199eb0c13b0"
]
]
},
{
"id": "f68fa199eb0c13b0",
"type": "switch",
"z": "9aafbf849d4d6e12",
"name": "",
"property": "payload",
"propertyType": "msg",
"rules": [
{
"t": "true"
},
{
"t": "false"
}
],
"checkall": "true",
"repair": false,
"outputs": 2,
"x": 280,
"y": 460,
"wires": [
[
"a4bef87a56ade625"
],
[
"6c1a9684ee9cff1b"
]
]
},
{
"id": "be7373d5f1fc78e3",
"type": "ui_switch",
"z": "9aafbf849d4d6e12",
"name": "",
"label": "setThreePhases",
"tooltip": "",
"group": "ebbb0e3f.53fbf",
"order": 5,
"width": 0,
"height": 0,
"passthru": true,
"decouple": "false",
"topic": "topic",
"topicType": "msg",
"style": "",
"onvalue": "true",
"onvalueType": "bool",
"onicon": "",
"oncolor": "",
"offvalue": "false",
"offvalueType": "bool",
"officon": "",
"offcolor": "",
"animate": false,
"x": 140,
"y": 540,
"wires": [
[
"ee61573475970e13"
]
]
},
{
"id": "ee61573475970e13",
"type": "mqtt out",
"z": "9aafbf849d4d6e12",
"name": "",
"topic": "/external/cmd/set_three_phases",
"qos": "1",
"retain": "false",
"respTopic": "",
"contentType": "",
"userProps": "",
"correl": "",
"expiry": "",
"broker": "fc8686af.48d178",
"x": 370,
"y": 540,
"wires": []
},
{
"id": "1e33ee217d09343a",
"type": "ui_switch",
"z": "9aafbf849d4d6e12",
"name": "",
"label": "enableRCD",
"tooltip": "",
"group": "ebbb0e3f.53fbf",
"order": 5,
"width": 0,
"height": 0,
"passthru": true,
"decouple": "false",
"topic": "topic",
"topicType": "msg",
"style": "",
"onvalue": "true",
"onvalueType": "bool",
"onicon": "",
"oncolor": "",
"offvalue": "false",
"offvalueType": "bool",
"officon": "",
"offcolor": "",
"animate": false,
"x": 130,
"y": 600,
"wires": [
[
"7f1db77313661cf3"
]
]
},
{
"id": "7f1db77313661cf3",
"type": "mqtt out",
"z": "9aafbf849d4d6e12",
"name": "",
"topic": "/external/cmd/enable_rcd",
"qos": "1",
"retain": "false",
"respTopic": "",
"contentType": "",
"userProps": "",
"correl": "",
"expiry": "",
"broker": "fc8686af.48d178",
"x": 350,
"y": 600,
"wires": []
},
{
"id": "23610d2f3c1a674b",
"type": "ui_switch",
"z": "9aafbf849d4d6e12",
"name": "",
"label": "setHasVentilation",
"tooltip": "",
"group": "ebbb0e3f.53fbf",
"order": 5,
"width": 0,
"height": 0,
"passthru": true,
"decouple": "false",
"topic": "topic",
"topicType": "msg",
"style": "",
"onvalue": "true",
"onvalueType": "bool",
"onicon": "",
"oncolor": "",
"offvalue": "false",
"offvalueType": "bool",
"officon": "",
"offcolor": "",
"animate": false,
"x": 150,
"y": 660,
"wires": [
[
"d40cd5658151e3ca"
]
]
},
{
"id": "d40cd5658151e3ca",
"type": "mqtt out",
"z": "9aafbf849d4d6e12",
"name": "",
"topic": "/external/cmd/set_has_ventilation",
"qos": "1",
"retain": "false",
"respTopic": "",
"contentType": "",
"userProps": "",
"correl": "",
"expiry": "",
"broker": "fc8686af.48d178",
"x": 420,
"y": 660,
"wires": []
},
{
"id": "d62a89349e2d9147",
"type": "mqtt out",
"z": "9aafbf849d4d6e12",
"name": "",
"topic": "/external/cmd/set_auth",
"qos": "1",
"retain": "false",
"respTopic": "",
"contentType": "",
"userProps": "",
"correl": "",
"expiry": "",
"broker": "fc8686af.48d178",
"x": 380,
"y": 220,
"wires": []
},
{
"id": "49a61fca4e975f0d",
"type": "ui_button",
"z": "9aafbf849d4d6e12",
"name": "",
"group": "ebbb0e3f.53fbf",
"order": 1,
"width": 0,
"height": 0,
"passthru": false,
"label": "setAuth(USERID)",
"tooltip": "",
"color": "",
"bgcolor": "",
"icon": "",
"payload": "USERID",
"payloadType": "str",
"topic": "topic",
"topicType": "msg",
"x": 150,
"y": 220,
"wires": [
[
"d62a89349e2d9147"
]
]
},
{
"id": "4a20ae416f941363",
"type": "ui_switch",
"z": "9aafbf849d4d6e12",
"name": "",
"label": "switch3phWhileCharging",
"tooltip": "",
"group": "ebbb0e3f.53fbf",
"order": 5,
"width": 0,
"height": 0,
"passthru": true,
"decouple": "false",
"topic": "topic",
"topicType": "msg",
"style": "",
"onvalue": "true",
"onvalueType": "bool",
"onicon": "",
"oncolor": "",
"offvalue": "false",
"offvalueType": "bool",
"officon": "",
"offcolor": "",
"animate": false,
"x": 170,
"y": 720,
"wires": [
[
"9f997a83d8c5e502"
]
]
},
{
"id": "9f997a83d8c5e502",
"type": "mqtt out",
"z": "9aafbf849d4d6e12",
"name": "",
"topic": "/external/cmd/switch_three_phases_while_charging",
"qos": "1",
"retain": "false",
"respTopic": "",
"contentType": "",
"userProps": "",
"correl": "",
"expiry": "",
"broker": "fc8686af.48d178",
"x": 530,
"y": 720,
"wires": []
},
{
"id": "b0dbe5826f92035e",
"type": "mqtt in",
"z": "9aafbf849d4d6e12",
"name": "",
"topic": "/external/debug_json",
"qos": "2",
"datatype": "auto",
"broker": "fc8686af.48d178",
"nl": false,
"rap": true,
"rh": 0,
"inputs": 0,
"x": 160,
"y": 960,
"wires": [
[
"a62346afa82d2aa1"
]
]
},
{
"id": "a62346afa82d2aa1",
"type": "json",
"z": "9aafbf849d4d6e12",
"name": "",
"property": "payload",
"action": "",
"pretty": false,
"x": 350,
"y": 960,
"wires": [
[
"971b16b8195f14bb"
]
]
},
{
"id": "971b16b8195f14bb",
"type": "function",
"z": "9aafbf849d4d6e12",
"name": "",
"func": "var json = msg.payload;\n\n\n//tab[top] = {'Variable' : top, 'Value' : pay};\n\n\nnewpayload = [];\nfor(var index in json) {\n newpayload.push({'Variable' : index, 'Value' : json[index]});\n}\n\nmsg.payload = newpayload;\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 510,
"y": 960,
"wires": [
[
"b79f8c3549cdb63e"
]
]
},
{
"id": "b79f8c3549cdb63e",
"type": "ui_table",
"z": "9aafbf849d4d6e12",
"group": "1709edaf.162962",
"name": "Debug",
"order": 12,
"width": "6",
"height": "11",
"columns": [],
"outputs": 0,
"cts": false,
"x": 680,
"y": 960,
"wires": []
},
{
"id": "105b9eab50b4db7f",
"type": "mqtt in",
"z": "9aafbf849d4d6e12",
"name": "",
"topic": "/external/keepalive_json",
"qos": "2",
"datatype": "auto",
"broker": "fc8686af.48d178",
"nl": false,
"rap": true,
"rh": 0,
"inputs": 0,
"x": 170,
"y": 1140,
"wires": [
[
"f9bce2148fd0d745"
]
]
},
{
"id": "f9bce2148fd0d745",
"type": "json",
"z": "9aafbf849d4d6e12",
"name": "",
"property": "payload",
"action": "",
"pretty": false,
"x": 350,
"y": 1140,
"wires": [
[
"81c08d60fe305390"
]
]
},
{
"id": "81c08d60fe305390",
"type": "function",
"z": "9aafbf849d4d6e12",
"name": "",
"func": "var json = msg.payload;\n\n\n//tab[top] = {'Variable' : top, 'Value' : pay};\n\n\nnewpayload = [];\nfor(var index in json) {\n newpayload.push({'Variable' : index, 'Value' : json[index]});\n}\n\nmsg.payload = newpayload;\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 510,
"y": 1140,
"wires": [
[
"24770a798c2cc78c"
]
]
},
{
"id": "24770a798c2cc78c",
"type": "ui_table",
"z": "9aafbf849d4d6e12",
"group": "8d6f402b.8f007",
"name": "KeepAlive",
"order": 12,
"width": "6",
"height": "4",
"columns": [],
"outputs": 0,
"cts": false,
"x": 690,
"y": 1140,
"wires": []
},
{
"id": "b2e6e05e396ff846",
"type": "mqtt in",
"z": "9aafbf849d4d6e12",
"name": "",
"topic": "/external/powermeter_json",
"qos": "2",
"datatype": "auto",
"broker": "fc8686af.48d178",
"nl": false,
"rap": true,
"rh": 0,
"inputs": 0,
"x": 170,
"y": 1200,
"wires": [
[
"bff81951aab38e7c"
]
]
},
{
"id": "bff81951aab38e7c",
"type": "json",
"z": "9aafbf849d4d6e12",
"name": "",
"property": "payload",
"action": "",
"pretty": false,
"x": 360,
"y": 1200,
"wires": [
[
"685dcdcf457910a6"
]
]
},
{
"id": "685dcdcf457910a6",
"type": "function",
"z": "9aafbf849d4d6e12",
"name": "",
"func": "var json = msg.payload;\n\n\n//tab[top] = {'Variable' : top, 'Value' : pay};\n\n\nnewpayload = [];\nfor(var index in json) {\n newpayload.push({'Variable' : index, 'Value' : json[index]});\n}\n\nmsg.payload = newpayload;\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 520,
"y": 1200,
"wires": [
[
"854cee03b9be0de5"
]
]
},
{
"id": "854cee03b9be0de5",
"type": "ui_table",
"z": "9aafbf849d4d6e12",
"group": "1ebee360.265b5d",
"name": "PowerMeter",
"order": 12,
"width": "6",
"height": "11",
"columns": [],
"outputs": 0,
"cts": false,
"x": 710,
"y": 1200,
"wires": []
},
{
"id": "dd9a01731c23f076",
"type": "mqtt in",
"z": "9aafbf849d4d6e12",
"name": "",
"topic": "/external/state/#",
"qos": "2",
"datatype": "auto",
"broker": "fc8686af.48d178",
"nl": false,
"rap": true,
"rh": 0,
"inputs": 0,
"x": 140,
"y": 1020,
"wires": [
[
"181994551d5096a8"
]
]
},
{
"id": "181994551d5096a8",
"type": "function",
"z": "9aafbf849d4d6e12",
"name": "",
"func": "let cur_topic_index = -1;\nlet topics_list_length = 0;\n\nvar topics_list = global.get(\"state_topics_list\");\nvar payload_list = global.get(\"state_payload_list\");\nvar new_payload = [];\n\nfor (var topics_list_index in topics_list) {\n if ( (topics_list[topics_list_index].indexOf(msg.topic) >= 0) && (topics_list[topics_list_index].length == msg.topic.length) ) {\n cur_topic_index = topics_list_index;\n break;\n }\n topics_list_length++;\n}\n\nif (cur_topic_index > -1) {\n payload_list[cur_topic_index] = msg.payload;\n} else {\n topics_list.push(msg.topic);\n payload_list.push(msg.payload);\n}\n\nglobal.set(\"state_topics_list\", topics_list);\nglobal.set(\"state_payload_list\", payload_list);\n\n\nfor (var index in payload_list) {\n new_payload.push({'Variable': topics_list[index].substr(16, topics_list[index].length), 'Value': payload_list[index]});\n}\n\nmsg.payload = new_payload;\nreturn msg;\n",
"outputs": 1,
"noerr": 0,
"initialize": "// Code added here will be run once\n// whenever the node is started.\nglobal.set(\"state_topics_list\", []);\nglobal.set(\"state_payload_list\", []);",
"finalize": "",
"libs": [],
"x": 520,
"y": 1020,
"wires": [
[
"f05a2bcbad4e5e4f"
]
]
},
{
"id": "f05a2bcbad4e5e4f",
"type": "ui_table",
"z": "9aafbf849d4d6e12",
"group": "d3f19d5c.593e5",
"name": "State",
"order": 12,
"width": "6",
"height": "4",
"columns": [],
"outputs": 0,
"cts": false,
"x": 690,
"y": 1020,
"wires": []
},
{
"id": "626ae76afca27c10",
"type": "ui_switch",
"z": "9aafbf849d4d6e12",
"name": "",
"label": "enableHLC",
"tooltip": "",
"group": "ebbb0e3f.53fbf",
"order": 5,
"width": 0,
"height": 0,
"passthru": true,
"decouple": "false",
"topic": "topic",
"topicType": "msg",
"style": "",
"onvalue": "true",
"onvalueType": "bool",
"onicon": "",
"oncolor": "",
"offvalue": "false",
"offvalueType": "bool",
"officon": "",
"offcolor": "",
"animate": false,
"x": 130,
"y": 780,
"wires": [
[
"cb19212395df1ec4"
]
]
},
{
"id": "cb19212395df1ec4",
"type": "mqtt out",
"z": "9aafbf849d4d6e12",
"name": "",
"topic": "/external/cmd/enable_hlc",
"qos": "1",
"retain": "false",
"respTopic": "",
"contentType": "",
"userProps": "",
"correl": "",
"expiry": "",
"broker": "fc8686af.48d178",
"x": 350,
"y": 780,
"wires": []
},
{
"id": "8761f22ed645e3d5",
"type": "ui_switch",
"z": "9aafbf849d4d6e12",
"name": "",
"label": "Simulation RCD",
"tooltip": "",
"group": "ebbb0e3f.53fbf",
"order": 5,
"width": 0,
"height": 0,
"passthru": true,
"decouple": "false",
"topic": "topic",
"topicType": "msg",
"style": "",
"onvalue": "true",
"onvalueType": "bool",
"onicon": "",
"oncolor": "",
"offvalue": "false",
"offvalueType": "bool",
"officon": "",
"offcolor": "",
"animate": false,
"x": 140,
"y": 840,
"wires": [
[
"c423c5096c47f04a"
]
]
},
{
"id": "c423c5096c47f04a",
"type": "mqtt out",
"z": "9aafbf849d4d6e12",
"name": "",
"topic": "/external/cmd/enable_rcd",
"qos": "1",
"retain": "false",
"respTopic": "",
"contentType": "",
"userProps": "",
"correl": "",
"expiry": "",
"broker": "fc8686af.48d178",
"x": 350,
"y": 840,
"wires": []
},
{
"id": "edcc986828bdfcc4",
"type": "comment",
"z": "9aafbf849d4d6e12",
"name": "Debug",
"info": "",
"x": 110,
"y": 40,
"wires": []
},
{
"id": "e8e1511b6239bfa2",
"type": "comment",
"z": "ed603c51db9dcbb9",
"name": "Initialize the Connector number",
"info": "",
"x": 230,
"y": 80,
"wires": []
},
{
"id": "23d875eef4c57fa8",
"type": "change",
"z": "ed603c51db9dcbb9",
"name": "",
"rules": [
{
"t": "set",
"p": "connector_number",
"pt": "flow",
"to": "1",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 440,
"y": 140,
"wires": [
[]
]
},
{
"id": "e99161497760c072",
"type": "inject",
"z": "ed603c51db9dcbb9",
"name": "",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": true,
"onceDelay": 0.1,
"topic": "",
"payloadType": "date",
"x": 190,
"y": 140,
"wires": [
[
"23d875eef4c57fa8"
]
]
},
{
"id": "b70c30908c955b81",
"type": "comment",
"z": "ed603c51db9dcbb9",
"name": "Data to show",
"info": "",
"x": 170,
"y": 200,
"wires": []
},
{
"id": "f96ccb60614f9f18",
"type": "mqtt out",
"z": "ed603c51db9dcbb9",
"name": "",
"topic": "",
"qos": "1",
"retain": "false",
"respTopic": "",
"contentType": "",
"userProps": "",
"correl": "",
"expiry": "",
"broker": "fc8686af.48d178",
"x": 890,
"y": 840,
"wires": []
},
{
"id": "3a5423dc1feed224",
"type": "ui_button",
"z": "ed603c51db9dcbb9",
"name": "",
"group": "b364f7eb4621082b",
"order": 1,
"width": "3",
"height": "1",
"passthru": false,
"label": "Pause",
"tooltip": "",
"color": "",
"bgcolor": "",
"icon": "",
"payload": "",
"payloadType": "str",
"topic": "everest_external/nodered/#/cmd/pause_charging",
"topicType": "str",
"x": 150,
"y": 700,
"wires": [
[
"361b3d846c4e6673"
]
]
},
{
"id": "f042bc45e3742ef7",
"type": "ui_button",
"z": "ed603c51db9dcbb9",
"name": "",
"group": "b364f7eb4621082b",
"order": 2,
"width": "3",
"height": "1",
"passthru": false,
"label": "Resume",
"tooltip": "",
"color": "",
"bgcolor": "",
"icon": "",
"payload": "",
"payloadType": "str",
"topic": "everest_external/nodered/#/cmd/resume_charging",
"topicType": "str",
"x": 160,
"y": 760,
"wires": [
[
"361b3d846c4e6673"
]
]
},
{
"id": "361b3d846c4e6673",
"type": "change",
"z": "ed603c51db9dcbb9",
"name": "Insert Connector number",
"rules": [
{
"t": "change",
"p": "topic",
"pt": "msg",
"from": "#",
"fromt": "str",
"to": "connector_number",
"tot": "flow"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 670,
"y": 840,
"wires": [
[
"f96ccb60614f9f18"
]
]
},
{
"id": "9c6d1a5e2ba43d36",
"type": "comment",
"z": "ed603c51db9dcbb9",
"name": "Commands",
"info": "",
"x": 170,
"y": 640,
"wires": []
},
{
"id": "51656271f4688a67",
"type": "mqtt in",
"z": "ed603c51db9dcbb9",
"name": "",
"topic": "everest_external/nodered/+/state/max_current",
"qos": "2",
"datatype": "auto",
"broker": "fc8686af.48d178",
"nl": false,
"rap": true,
"rh": 0,
"inputs": 0,
"x": 270,
"y": 280,
"wires": [
[
"f5ca89d3e6d1d1ba"
]
]
},
{
"id": "f5ca89d3e6d1d1ba",
"type": "function",
"z": "ed603c51db9dcbb9",
"name": "Filter connector number",
"func": "if (msg.topic.indexOf(String(flow.get('connector_number'))) > -1) return msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 590,
"y": 280,
"wires": [
[
"1a019e35e580cbf4"
]
]
},
{
"id": "1a019e35e580cbf4",
"type": "ui_text",
"z": "ed603c51db9dcbb9",
"group": "b364f7eb4621082b",
"order": 3,
"width": 0,
"height": 0,
"name": "",
"label": "Max Current Enforced",
"format": "{{msg.payload | number: 1}}",
"layout": "row-spread",
"className": "",
"x": 920,
"y": 280,
"wires": []
},
{
"id": "799130c039278e9b",
"type": "ui_text",
"z": "ed603c51db9dcbb9",
"group": "b364f7eb4621082b",
"order": 9,
"width": 0,
"height": 0,
"name": "",
"label": "Energy Charged",
"format": "{{msg.payload | number:2}} kWh",
"layout": "row-spread",
"x": 880,
"y": 340,
"wires": []
},
{
"id": "a24c1a5f8bb6a5b5",
"type": "function",
"z": "ed603c51db9dcbb9",
"name": "Filter connector number",
"func": "if (msg.topic.indexOf(String(flow.get('connector_number'))) > -1) return msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 650,
"y": 340,
"wires": [
[
"799130c039278e9b"
]
]
},
{
"id": "7164db07c0a78327",
"type": "mqtt in",
"z": "ed603c51db9dcbb9",
"name": "",
"topic": "everest_external/nodered/+/powermeter/totalKWattHr",
"qos": "2",
"datatype": "auto",
"broker": "fc8686af.48d178",
"nl": false,
"rap": true,
"rh": 0,
"inputs": 0,
"x": 300,
"y": 340,
"wires": [
[
"a24c1a5f8bb6a5b5"
]
]
},
{
"id": "9715c97a5a212e0f",
"type": "mqtt in",
"z": "ed603c51db9dcbb9",
"name": "",
"topic": "everest_external/nodered/+/state/state_string",
"qos": "2",
"datatype": "auto",
"broker": "fc8686af.48d178",
"nl": false,
"rap": true,
"rh": 0,
"inputs": 0,
"x": 270,
"y": 440,
"wires": [
[
"0139c0ace0e5f706"
]
]
},
{
"id": "8059bceefd9dcdf7",
"type": "mqtt in",
"z": "ed603c51db9dcbb9",
"name": "",
"topic": "everest_external/nodered/+/powermeter/totalKw",
"qos": "2",
"datatype": "auto",
"broker": "fc8686af.48d178",
"nl": false,
"rap": true,
"rh": 0,
"inputs": 0,
"x": 280,
"y": 500,
"wires": [
[
"6941efd3ef8e1ac4"
]
]
},
{
"id": "72a90b471d6ebb44",
"type": "ui_level",
"z": "ed603c51db9dcbb9",
"group": "b364f7eb4621082b",
"order": 11,
"width": 0,
"height": 0,
"name": "",
"label": "Temperature:",
"colorHi": "#e60000",
"colorWarn": "#ff9900",
"colorNormal": "#00b33c",
"colorOff": "#595959",
"min": "-20",
"max": "85",
"segWarn": "65",
"segHigh": "75",
"unit": "",
"layout": "sh",
"channelA": "",
"channelB": "",
"decimals": 0,
"animations": "soft",
"shape": "3",
"colorschema": "valuedriven",
"textoptions": "default",
"colorText": "#eeeeee",
"fontLabel": "",
"fontValue": "",
"fontSmall": "",
"colorFromTheme": true,
"textAnimations": false,
"hideValue": false,
"tickmode": "segments",
"peakmode": false,
"property": "payload",
"peaktime": 3000,
"x": 1010,
"y": 560,
"wires": []
},
{
"id": "4b864ea8df7d27cf",
"type": "mqtt in",
"z": "ed603c51db9dcbb9",
"name": "",
"topic": "everest_external/nodered/+/state/temperature",
"qos": "0",
"datatype": "auto",
"broker": "fc8686af.48d178",
"nl": false,
"rap": true,
"rh": 0,
"inputs": 0,
"x": 280,
"y": 560,
"wires": [
[
"bc1b6adb5db9d7e4"
]
]
},
{
"id": "1ef49a48bf883748",
"type": "function",
"z": "ed603c51db9dcbb9",
"name": "",
"func": "if (msg.topic.indexOf('totalKw')>=0) {\n context.data.totalKw = msg.payload;\n}\nelse if (msg.topic.indexOf('state_string')>=0) {\n context.data.state_string = msg.payload;\n}\n\n//node.warn(msg.topic);\nmsg.payload = context.data.totalKw;\nmsg.label = context.data.state_string;\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "// Code added here will be run once\n// whenever the node is started.\ncontext.data = {}",
"finalize": "",
"libs": [],
"x": 980,
"y": 480,
"wires": [
[
"5bd8abc274e70360",
"1295e032d7ddbc20"
]
]
},
{
"id": "5bd8abc274e70360",
"type": "debug",
"z": "ed603c51db9dcbb9",
"name": "",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 1190,
"y": 380,
"wires": []
},
{
"id": "1295e032d7ddbc20",
"type": "ui_gauge",
"z": "ed603c51db9dcbb9",
"g": "af1e1eeac9c4b704",
"name": "",
"group": "b364f7eb4621082b",
"order": 10,
"width": 0,
"height": 0,
"gtype": "gage",
"title": "{{msg.label}}",
"label": "Kilowatt",
"format": "{{value}} kW",
"min": "-10",
"max": "10",
"colors": [
"#1aa7ff",
"#04ff00",
"#ffea00"
],
"seg1": "",
"seg2": "",
"className": "",
"x": 1190,
"y": 480,
"wires": []
},
{
"id": "6941efd3ef8e1ac4",
"type": "function",
"z": "ed603c51db9dcbb9",
"name": "Filter connector number",
"func": "if (msg.topic.indexOf(String(flow.get('connector_number'))) > -1) return msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 730,
"y": 500,
"wires": [
[
"1ef49a48bf883748"
]
]
},
{
"id": "0139c0ace0e5f706",
"type": "function",
"z": "ed603c51db9dcbb9",
"name": "Filter connector number",
"func": "if (msg.topic.indexOf(String(flow.get('connector_number'))) > -1) return msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 730,
"y": 460,
"wires": [
[
"1ef49a48bf883748"
]
]
},
{
"id": "bc1b6adb5db9d7e4",
"type": "function",
"z": "ed603c51db9dcbb9",
"name": "Filter connector number",
"func": "if (msg.topic.indexOf(String(flow.get('connector_number'))) > -1) return msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 710,
"y": 560,
"wires": [
[
"72a90b471d6ebb44"
]
]
},
{
"id": "348dfdc4b48ec881",
"type": "comment",
"z": "ed603c51db9dcbb9",
"name": "Simulation control",
"info": "",
"x": 190,
"y": 820,
"wires": []
},
{
"id": "352d9f34ae594f58",
"type": "ui_switch",
"z": "ed603c51db9dcbb9",
"name": "",
"label": "Simulation enable (HIL)",
"tooltip": "",
"group": "b364f7eb4621082b",
"order": 14,
"width": 0,
"height": 0,
"passthru": true,
"decouple": "false",
"topic": "everest_external/nodered/#/carsim/cmd/enable",
"topicType": "str",
"style": "",
"onvalue": "true",
"onvalueType": "bool",
"onicon": "",
"oncolor": "",
"offvalue": "false",
"offvalueType": "bool",
"officon": "",
"offcolor": "",
"animate": false,
"x": 210,
"y": 880,
"wires": [
[
"361b3d846c4e6673"
]
]
},
{
"id": "76be7e55a947f675",
"type": "ui_button",
"z": "ed603c51db9dcbb9",
"name": "",
"group": "b364f7eb4621082b",
"order": 12,
"width": "3",
"height": "1",
"passthru": false,
"label": "Car Plugin",
"tooltip": "",
"color": "",
"bgcolor": "",
"icon": "",
"payload": "start",
"payloadType": "str",
"topic": "everest_external/nodered/#/carsim/cmd/execute_charging_session",
"topicType": "str",
"x": 170,
"y": 980,
"wires": [
[
"620b0d248a89ece0"
]
]
},
{
"id": "42f4c4f916474559",
"type": "ui_button",
"z": "ed603c51db9dcbb9",
"name": "",
"group": "b364f7eb4621082b",
"order": 13,
"width": "3",
"height": "1",
"passthru": false,
"label": "Stop & Unplug",
"tooltip": "",
"color": "",
"bgcolor": "",
"icon": "",
"payload": "stop",
"payloadType": "str",
"topic": "everest_external/nodered/#/carsim/cmd/modify_charging_session",
"topicType": "str",
"x": 180,
"y": 940,
"wires": [
[
"620b0d248a89ece0"
]
]
},
{
"id": "f2ae0c306f3052f9",
"type": "ui_dropdown",
"z": "ed603c51db9dcbb9",
"name": "",
"label": "Car Simulation",
"tooltip": "",
"place": "Select option",
"group": "b364f7eb4621082b",
"order": 15,
"width": 0,
"height": 0,
"passthru": true,
"multiple": false,
"options": [
{
"label": "AC 3ph 16A",
"value": "sleep 1;iec_wait_pwr_ready;sleep 1;draw_power_regulated 16,3;sleep 36000#unplug",
"type": "str"
},
{
"label": "AC 1ph 32A",
"value": "sleep 1;iec_wait_pwr_ready;sleep 1;draw_power_regulated 32,1;sleep 36000#unplug",
"type": "str"
},
{
"label": "AC Diode Fail",
"value": "sleep 1;iec_wait_pwr_ready;sleep 1;draw_power_regulated 32,3;sleep 5;diode_fail;sleep 36000#unplug",
"type": "str"
},
{
"label": "AC Error E",
"value": "sleep 1;iec_wait_pwr_ready;sleep 1;draw_power_regulated 16,3;sleep 3;error_e;sleep 36000#unplug",
"type": "str"
},
{
"label": "AC RCD Error",
"value": "sleep 1;rcd_current 10.3;sleep 10;rcd_current 0.1#unplug",
"type": "str"
},
{
"label": "AC ISO15118-2",
"value": "sleep 1;iso_wait_slac_matched;iso_start_v2g_session AC 86400 0;iso_wait_pwr_ready;iso_draw_power_regulated 16,3;iso_wait_for_stop 36000#iso_stop_charging;iso_wait_v2g_session_stopped;unplug",
"type": "str"
},
{
"label": "DC ISO15118-2",
"value": "sleep 1;iso_wait_slac_matched;iso_start_v2g_session DC 86400 0;iso_wait_for_stop 36000#iso_stop_charging;iso_wait_v2g_session_stopped;unplug",
"type": "str"
}
],
"payload": "",
"topic": "sim_commands",
"topicType": "str",
"x": 180,
"y": 1040,
"wires": [
[
"620b0d248a89ece0"
]
]
},
{
"id": "620b0d248a89ece0",
"type": "function",
"z": "ed603c51db9dcbb9",
"name": "Buffer sim commands",
"func": "if (msg.topic.indexOf('sim_commands') > -1) {\n const s = msg.payload.split('#');\n flow.set('sim_commands_start', s[0]);\n flow.set('sim_commands_stop', s[1]);\n} else if (msg.payload == 'start') {\n msg.payload = flow.get('sim_commands_start');\n return msg;\n} else if (msg.payload == 'stop') {\n msg.payload = flow.get('sim_commands_stop');\n return msg;\n} else {\n msg.payload = 'NONE';\n return msg;\n}\n",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 440,
"y": 960,
"wires": [
[
"361b3d846c4e6673",
"cc42c210398a8d50",
"fb1511183c9a660f"
]
]
},
{
"id": "fb1511183c9a660f",
"type": "debug",
"z": "ed603c51db9dcbb9",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 910,
"y": 920,
"wires": []
},
{
"id": "fef2be4575e66bda",
"type": "inject",
"z": "ed603c51db9dcbb9",
"name": "",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": true,
"onceDelay": "1",
"topic": "sim_commands",
"payload": "sleep 1;iec_wait_pwr_ready;sleep 1;draw_power_regulated 16,3;sleep 36000#unplug",
"payloadType": "str",
"x": 150,
"y": 1100,
"wires": [
[
"f2ae0c306f3052f9"
]
]
},
{
"id": "cc42c210398a8d50",
"type": "debug",
"z": "ed603c51db9dcbb9",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "topic",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 900,
"y": 960,
"wires": []
},
{
"id": "607c873026fc7268",
"type": "mqtt in",
"z": "ed603c51db9dcbb9",
"name": "",
"topic": "everest_external/nodered/+/state/max_watt",
"qos": "2",
"datatype": "auto",
"broker": "fc8686af.48d178",
"nl": false,
"rap": true,
"rh": 0,
"inputs": 0,
"x": 260,
"y": 240,
"wires": [
[
"b3c20bf38b636a9c"
]
]
},
{
"id": "b3c20bf38b636a9c",
"type": "function",
"z": "ed603c51db9dcbb9",
"name": "Filter connector number",
"func": "if (msg.topic.indexOf(String(flow.get('connector_number'))) > -1) return msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 590,
"y": 240,
"wires": [
[
"ae1383373e612977"
]
]
},
{
"id": "ae1383373e612977",
"type": "ui_text",
"z": "ed603c51db9dcbb9",
"group": "b364f7eb4621082b",
"order": 6,
"width": 0,
"height": 0,
"name": "",
"label": "Max Watt Enforced",
"format": "{{msg.payload | number: 1}}",
"layout": "row-spread",
"className": "",
"x": 910,
"y": 240,
"wires": []
},
{
"id": "b51f909e517eb54d",
"type": "ui_slider",
"z": "ed603c51db9dcbb9",
"name": "MaxWatt Slider",
"label": "",
"tooltip": "",
"group": "b364f7eb4621082b",
"order": 8,
"width": 0,
"height": 0,
"passthru": false,
"outs": "all",
"topic": "everest_external/nodered/#/cmd/set_max_watt",
"topicType": "str",
"min": "0",
"max": "10000",
"step": "10",
"className": "",
"x": 440,
"y": 640,
"wires": [
[
"361b3d846c4e6673",
"251a88a2ed97c829"
]
]
},
{
"id": "251a88a2ed97c829",
"type": "ui_text",
"z": "ed603c51db9dcbb9",
"group": "b364f7eb4621082b",
"order": 7,
"width": 0,
"height": 0,
"name": "",
"label": "Max Watt Requested",
"format": "{{msg.payload | number: 1}}",
"layout": "row-spread",
"className": "",
"x": 780,
"y": 640,
"wires": []
},
{
"id": "c38db41c04e181e6",
"type": "ui_text",
"z": "ed603c51db9dcbb9",
"group": "b364f7eb4621082b",
"order": 4,
"width": 0,
"height": 0,
"name": "",
"label": "Max Current Requested",
"format": "{{msg.payload | number: 1}}",
"layout": "row-spread",
"className": "",
"x": 770,
"y": 700,
"wires": []
},
{
"id": "93dd36dc667295e2",
"type": "ui_slider",
"z": "ed603c51db9dcbb9",
"name": "MaxCurrent Slider",
"label": "",
"tooltip": "",
"group": "b364f7eb4621082b",
"order": 5,
"width": 0,
"height": 0,
"passthru": false,
"outs": "all",
"topic": "everest_external/nodered/#/cmd/set_max_current",
"topicType": "str",
"min": "0",
"max": "16",
"step": "0.1",
"className": "",
"x": 430,
"y": 700,
"wires": [
[
"c38db41c04e181e6",
"361b3d846c4e6673"
]
]
},
{
"id": "1ed96f5396429f82",
"type": "comment",
"z": "aa273dc8b2748caa",
"name": "Initialize the Connector number",
"info": "",
"x": 190,
"y": 60,
"wires": []
},
{
"id": "615ea4a4ea9f0da4",
"type": "change",
"z": "aa273dc8b2748caa",
"name": "",
"rules": [
{
"t": "set",
"p": "connector_number",
"pt": "flow",
"to": "2",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 400,
"y": 120,
"wires": [
[]
]
},
{
"id": "59a702a060464936",
"type": "inject",
"z": "aa273dc8b2748caa",
"name": "",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": true,
"onceDelay": 0.1,
"topic": "",
"payloadType": "date",
"x": 150,
"y": 120,
"wires": [
[
"615ea4a4ea9f0da4"
]
]
},
{
"id": "6461170fee367ba6",
"type": "comment",
"z": "aa273dc8b2748caa",
"name": "Data to show",
"info": "",
"x": 130,
"y": 180,
"wires": []
},
{
"id": "defa678bb0daca7f",
"type": "mqtt out",
"z": "aa273dc8b2748caa",
"name": "",
"topic": "",
"qos": "1",
"retain": "false",
"respTopic": "",
"contentType": "",
"userProps": "",
"correl": "",
"expiry": "",
"broker": "fc8686af.48d178",
"x": 850,
"y": 820,
"wires": []
},
{
"id": "6898272c00f99b02",
"type": "ui_button",
"z": "aa273dc8b2748caa",
"name": "",
"group": "21e40a4a97a50168",
"order": 1,
"width": "3",
"height": "1",
"passthru": false,
"label": "Pause",
"tooltip": "",
"color": "",
"bgcolor": "",
"className": "",
"icon": "",
"payload": "",
"payloadType": "str",
"topic": "everest_external/nodered/#/cmd/pause_charging",
"topicType": "str",
"x": 110,
"y": 680,
"wires": [
[
"0c83395a373478e4"
]
]
},
{
"id": "e340e5c4d2185376",
"type": "ui_button",
"z": "aa273dc8b2748caa",
"name": "",
"group": "21e40a4a97a50168",
"order": 2,
"width": "3",
"height": "1",
"passthru": false,
"label": "Resume",
"tooltip": "",
"color": "",
"bgcolor": "",
"className": "",
"icon": "",
"payload": "",
"payloadType": "str",
"topic": "everest_external/nodered/#/cmd/resume_charging",
"topicType": "str",
"x": 120,
"y": 740,
"wires": [
[
"0c83395a373478e4"
]
]
},
{
"id": "0c83395a373478e4",
"type": "change",
"z": "aa273dc8b2748caa",
"name": "Insert Connector number",
"rules": [
{
"t": "change",
"p": "topic",
"pt": "msg",
"from": "#",
"fromt": "str",
"to": "connector_number",
"tot": "flow"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 630,
"y": 820,
"wires": [
[
"defa678bb0daca7f"
]
]
},
{
"id": "127fece688636162",
"type": "comment",
"z": "aa273dc8b2748caa",
"name": "Commands",
"info": "",
"x": 130,
"y": 620,
"wires": []
},
{
"id": "cf0f303e9b027385",
"type": "mqtt in",
"z": "aa273dc8b2748caa",
"name": "",
"topic": "everest_external/nodered/+/state/max_current",
"qos": "2",
"datatype": "auto",
"broker": "fc8686af.48d178",
"nl": false,
"rap": true,
"rh": 0,
"inputs": 0,
"x": 230,
"y": 260,
"wires": [
[
"5d0ac0a37ae673d6"
]
]
},
{
"id": "5d0ac0a37ae673d6",
"type": "function",
"z": "aa273dc8b2748caa",
"name": "Filter connector number",
"func": "if (msg.topic.indexOf(String(flow.get('connector_number'))) > -1) return msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 550,
"y": 260,
"wires": [
[
"ab60171a17a70f36"
]
]
},
{
"id": "ab60171a17a70f36",
"type": "ui_text",
"z": "aa273dc8b2748caa",
"group": "21e40a4a97a50168",
"order": 3,
"width": 0,
"height": 0,
"name": "",
"label": "Max Current Enforced",
"format": "{{msg.payload | number: 1}}",
"layout": "row-spread",
"className": "",
"x": 880,
"y": 260,
"wires": []
},
{
"id": "a5373a3a886fc204",
"type": "ui_text",
"z": "aa273dc8b2748caa",
"group": "21e40a4a97a50168",
"order": 9,
"width": 0,
"height": 0,
"name": "",
"label": "Energy Charged",
"format": "{{msg.payload | number:2}} kWh",
"layout": "row-spread",
"className": "",
"x": 840,
"y": 320,
"wires": []
},
{
"id": "b1c2dd8c539f94bb",
"type": "function",
"z": "aa273dc8b2748caa",
"name": "Filter connector number",
"func": "if (msg.topic.indexOf(String(flow.get('connector_number'))) > -1) return msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 610,
"y": 320,
"wires": [
[
"a5373a3a886fc204"
]
]
},
{
"id": "b546045cecf671a5",
"type": "mqtt in",
"z": "aa273dc8b2748caa",
"name": "",
"topic": "everest_external/nodered/+/powermeter/totalKWattHr",
"qos": "2",
"datatype": "auto",
"broker": "fc8686af.48d178",
"nl": false,
"rap": true,
"rh": 0,
"inputs": 0,
"x": 260,
"y": 320,
"wires": [
[
"b1c2dd8c539f94bb"
]
]
},
{
"id": "866e7a7760dc139b",
"type": "mqtt in",
"z": "aa273dc8b2748caa",
"name": "",
"topic": "everest_external/nodered/+/state/state_string",
"qos": "2",
"datatype": "auto",
"broker": "fc8686af.48d178",
"nl": false,
"rap": true,
"rh": 0,
"inputs": 0,
"x": 230,
"y": 420,
"wires": [
[
"afde0add3f7939fe"
]
]
},
{
"id": "d02db89af8a0bd7b",
"type": "mqtt in",
"z": "aa273dc8b2748caa",
"name": "",
"topic": "everest_external/nodered/+/powermeter/totalKw",
"qos": "2",
"datatype": "auto",
"broker": "fc8686af.48d178",
"nl": false,
"rap": true,
"rh": 0,
"inputs": 0,
"x": 240,
"y": 480,
"wires": [
[
"cc11d86c1126f07b"
]
]
},
{
"id": "4b89f8f8a6ca9748",
"type": "ui_level",
"z": "aa273dc8b2748caa",
"group": "21e40a4a97a50168",
"order": 11,
"width": 0,
"height": 0,
"name": "",
"label": "Temperature:",
"colorHi": "#e60000",
"colorWarn": "#ff9900",
"colorNormal": "#00b33c",
"colorOff": "#595959",
"min": "-20",
"max": "85",
"segWarn": "65",
"segHigh": "75",
"unit": "",
"layout": "sh",
"channelA": "",
"channelB": "",
"decimals": 0,
"animations": "soft",
"shape": "3",
"colorschema": "valuedriven",
"textoptions": "default",
"colorText": "#eeeeee",
"fontLabel": "",
"fontValue": "",
"fontSmall": "",
"colorFromTheme": true,
"textAnimations": false,
"hideValue": false,
"tickmode": "segments",
"peakmode": false,
"property": "payload",
"peaktime": 3000,
"x": 970,
"y": 540,
"wires": []
},
{
"id": "1fbe177df384f155",
"type": "mqtt in",
"z": "aa273dc8b2748caa",
"name": "",
"topic": "everest_external/nodered/+/state/temperature",
"qos": "0",
"datatype": "auto",
"broker": "fc8686af.48d178",
"nl": false,
"rap": true,
"rh": 0,
"inputs": 0,
"x": 240,
"y": 540,
"wires": [
[
"def792b46c8e64ea"
]
]
},
{
"id": "45b6bcceff30736d",
"type": "function",
"z": "aa273dc8b2748caa",
"name": "",
"func": "if (msg.topic.indexOf('totalKw')>=0) {\n context.data.totalKw = msg.payload;\n}\nelse if (msg.topic.indexOf('state_string')>=0) {\n context.data.state_string = msg.payload;\n}\n\n//node.warn(msg.topic);\nmsg.payload = context.data.totalKw;\nmsg.label = context.data.state_string;\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "// Code added here will be run once\n// whenever the node is started.\ncontext.data = {}",
"finalize": "",
"libs": [],
"x": 940,
"y": 460,
"wires": [
[
"532e3ed5edde25c9",
"55cc973dd820527b"
]
]
},
{
"id": "532e3ed5edde25c9",
"type": "debug",
"z": "aa273dc8b2748caa",
"name": "",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 1150,
"y": 360,
"wires": []
},
{
"id": "cc11d86c1126f07b",
"type": "function",
"z": "aa273dc8b2748caa",
"name": "Filter connector number",
"func": "if (msg.topic.indexOf(String(flow.get('connector_number'))) > -1) return msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 690,
"y": 480,
"wires": [
[
"45b6bcceff30736d"
]
]
},
{
"id": "afde0add3f7939fe",
"type": "function",
"z": "aa273dc8b2748caa",
"name": "Filter connector number",
"func": "if (msg.topic.indexOf(String(flow.get('connector_number'))) > -1) return msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 690,
"y": 440,
"wires": [
[
"45b6bcceff30736d"
]
]
},
{
"id": "def792b46c8e64ea",
"type": "function",
"z": "aa273dc8b2748caa",
"name": "Filter connector number",
"func": "if (msg.topic.indexOf(String(flow.get('connector_number'))) > -1) return msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 670,
"y": 540,
"wires": [
[
"4b89f8f8a6ca9748"
]
]
},
{
"id": "ec7755c4b969ae8c",
"type": "comment",
"z": "aa273dc8b2748caa",
"name": "Simulation control",
"info": "",
"x": 150,
"y": 800,
"wires": []
},
{
"id": "7530d30bc8c402dc",
"type": "ui_switch",
"z": "aa273dc8b2748caa",
"name": "",
"label": "Simulation enable (HIL)",
"tooltip": "",
"group": "21e40a4a97a50168",
"order": 14,
"width": 0,
"height": 0,
"passthru": true,
"decouple": "false",
"topic": "everest_external/nodered/#/carsim/cmd/enable",
"topicType": "str",
"style": "",
"onvalue": "true",
"onvalueType": "bool",
"onicon": "",
"oncolor": "",
"offvalue": "false",
"offvalueType": "bool",
"officon": "",
"offcolor": "",
"animate": false,
"className": "",
"x": 170,
"y": 860,
"wires": [
[
"0c83395a373478e4"
]
]
},
{
"id": "d0f43fa4b39a385d",
"type": "ui_button",
"z": "aa273dc8b2748caa",
"name": "",
"group": "21e40a4a97a50168",
"order": 12,
"width": "3",
"height": "1",
"passthru": false,
"label": "Car Plugin",
"tooltip": "",
"color": "",
"bgcolor": "",
"className": "",
"icon": "",
"payload": "start",
"payloadType": "str",
"topic": "everest_external/nodered/#/carsim/cmd/execute_charging_session",
"topicType": "str",
"x": 130,
"y": 960,
"wires": [
[
"a7aeb9fff1b29736"
]
]
},
{
"id": "5f3d4d7e09cc8335",
"type": "ui_button",
"z": "aa273dc8b2748caa",
"name": "",
"group": "21e40a4a97a50168",
"order": 13,
"width": "3",
"height": "1",
"passthru": false,
"label": "Stop & Unplug",
"tooltip": "",
"color": "",
"bgcolor": "",
"className": "",
"icon": "",
"payload": "stop",
"payloadType": "str",
"topic": "everest_external/nodered/#/carsim/cmd/modify_charging_session",
"topicType": "str",
"x": 140,
"y": 920,
"wires": [
[
"a7aeb9fff1b29736"
]
]
},
{
"id": "e95b39d837c39878",
"type": "ui_dropdown",
"z": "aa273dc8b2748caa",
"name": "",
"label": "Car Simulation",
"tooltip": "",
"place": "Select option",
"group": "21e40a4a97a50168",
"order": 15,
"width": 0,
"height": 0,
"passthru": true,
"multiple": false,
"options": [
{
"label": "AC 3ph 16A",
"value": "sleep 1;iec_wait_pwr_ready;sleep 1;draw_power_regulated 16,3;sleep 36000#unplug",
"type": "str"
},
{
"label": "AC 1ph 32A",
"value": "sleep 1;iec_wait_pwr_ready;sleep 1;draw_power_regulated 32,1;sleep 36000#unplug",
"type": "str"
},
{
"label": "AC Diode Fail",
"value": "sleep 1;iec_wait_pwr_ready;sleep 1;draw_power_regulated 32,3;sleep 5;diode_fail;sleep 36000#unplug",
"type": "str"
},
{
"label": "AC Error E",
"value": "sleep 1;iec_wait_pwr_ready;sleep 1;draw_power_regulated 16,3;sleep 3;error_e;sleep 36000#unplug",
"type": "str"
},
{
"label": "AC RCD Error",
"value": "sleep 1;rcd_current 10.3;sleep 10;rcd_current 0.1#unplug",
"type": "str"
}
],
"payload": "",
"topic": "sim_commands",
"topicType": "str",
"className": "",
"x": 140,
"y": 1020,
"wires": [
[
"a7aeb9fff1b29736"
]
]
},
{
"id": "a7aeb9fff1b29736",
"type": "function",
"z": "aa273dc8b2748caa",
"name": "Buffer sim commands",
"func": "if (msg.topic.indexOf('sim_commands') > -1) {\n const s = msg.payload.split('#');\n flow.set('sim_commands_start', s[0]);\n flow.set('sim_commands_stop', s[1]);\n} else if (msg.payload == 'start') {\n msg.payload = flow.get('sim_commands_start');\n return msg;\n} else if (msg.payload == 'stop') {\n msg.payload = flow.get('sim_commands_stop');\n return msg;\n} else {\n msg.payload = 'NONE';\n return msg;\n}\n",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 400,
"y": 940,
"wires": [
[
"0c83395a373478e4",
"cd262b24c56e1d5a",
"84720887bbc53011"
]
]
},
{
"id": "84720887bbc53011",
"type": "debug",
"z": "aa273dc8b2748caa",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 870,
"y": 900,
"wires": []
},
{
"id": "82c7d6dc85bbd370",
"type": "inject",
"z": "aa273dc8b2748caa",
"name": "",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": true,
"onceDelay": "1",
"topic": "sim_commands",
"payload": "sleep 1;iec_wait_pwr_ready;sleep 1;draw_power_regulated 16,3;sleep 36000#unplug",
"payloadType": "str",
"x": 110,
"y": 1080,
"wires": [
[
"e95b39d837c39878"
]
]
},
{
"id": "cd262b24c56e1d5a",
"type": "debug",
"z": "aa273dc8b2748caa",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "topic",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 860,
"y": 940,
"wires": []
},
{
"id": "cdb5f34b27a4519a",
"type": "mqtt in",
"z": "aa273dc8b2748caa",
"name": "",
"topic": "everest_external/nodered/+/state/max_watt",
"qos": "2",
"datatype": "auto",
"broker": "fc8686af.48d178",
"nl": false,
"rap": true,
"rh": 0,
"inputs": 0,
"x": 220,
"y": 220,
"wires": [
[
"6545fc927e36dcaf"
]
]
},
{
"id": "6545fc927e36dcaf",
"type": "function",
"z": "aa273dc8b2748caa",
"name": "Filter connector number",
"func": "if (msg.topic.indexOf(String(flow.get('connector_number'))) > -1) return msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 550,
"y": 220,
"wires": [
[
"55a0037d0ff2ae85"
]
]
},
{
"id": "55a0037d0ff2ae85",
"type": "ui_text",
"z": "aa273dc8b2748caa",
"group": "21e40a4a97a50168",
"order": 6,
"width": 0,
"height": 0,
"name": "",
"label": "Max Watt Enforced",
"format": "{{msg.payload | number: 1}}",
"layout": "row-spread",
"className": "",
"x": 870,
"y": 220,
"wires": []
},
{
"id": "b87eac5b09aae877",
"type": "ui_slider",
"z": "aa273dc8b2748caa",
"name": "MaxWatt Slider",
"label": "",
"tooltip": "",
"group": "21e40a4a97a50168",
"order": 8,
"width": 0,
"height": 0,
"passthru": false,
"outs": "all",
"topic": "everest_external/nodered/#/cmd/set_max_watt",
"topicType": "str",
"min": "0",
"max": "10000",
"step": "10",
"className": "",
"x": 400,
"y": 620,
"wires": [
[
"0c83395a373478e4",
"9fd69cbae43633be"
]
]
},
{
"id": "9fd69cbae43633be",
"type": "ui_text",
"z": "aa273dc8b2748caa",
"group": "21e40a4a97a50168",
"order": 7,
"width": 0,
"height": 0,
"name": "",
"label": "Max Watt Requested",
"format": "{{msg.payload | number: 1}}",
"layout": "row-spread",
"className": "",
"x": 740,
"y": 620,
"wires": []
},
{
"id": "55cc973dd820527b",
"type": "ui_gauge",
"z": "aa273dc8b2748caa",
"g": "1fde85c123a85efb",
"name": "",
"group": "21e40a4a97a50168",
"order": 10,
"width": 0,
"height": 0,
"gtype": "gage",
"title": "{{msg.label}}",
"label": "Kilowatt",
"format": "{{value}} kW",
"min": "-10",
"max": "10",
"colors": [
"#1aa7ff",
"#04ff00",
"#ffea00"
],
"seg1": "",
"seg2": "",
"className": "",
"x": 1150,
"y": 460,
"wires": []
},
{
"id": "629404b6cfa9ba6b",
"type": "ui_slider",
"z": "aa273dc8b2748caa",
"name": "MaxCurrent Slider",
"label": "",
"tooltip": "",
"group": "21e40a4a97a50168",
"order": 5,
"width": 0,
"height": 0,
"passthru": false,
"outs": "all",
"topic": "everest_external/nodered/#/cmd/set_max_current",
"topicType": "str",
"min": "0",
"max": "16",
"step": "0.1",
"className": "",
"x": 410,
"y": 680,
"wires": [
[
"52728a05e5c0608e",
"0c83395a373478e4"
]
]
},
{
"id": "52728a05e5c0608e",
"type": "ui_text",
"z": "aa273dc8b2748caa",
"group": "21e40a4a97a50168",
"order": 4,
"width": 0,
"height": 0,
"name": "",
"label": "Max Current Requested",
"format": "{{msg.payload | number: 1}}",
"layout": "row-spread",
"className": "",
"x": 750,
"y": 680,
"wires": []
}
]