Read this first: How does the Multiplus trickle charger work
Summary:
For an RV build, I’ve built a Node-RED Flow to control when the Multiplus’ trickle charge circuit is allowed to be connected to the starter battery. I wanted to use the MPs built-in feature, but I wanted it to be switched (on-screen and remotely) and wanted it to be automated, and wanted it to be smarter than just based on voltages or voltage drop. The behavior described in the link above would actually work out just fine for me, but DIY improving it was well worth the effort.
The solution enables using switches (on-screen or physical) in the GX system to toggle the trickle charge on and off. You could do that part without Node-RED. You have more options if you use Node-RED. In the finished product you have the option to fully disable trickle charging, or fully enable it, or let it occur automatically when conditions are suitable.
The Outcome:
The automated end product waits until the sun is up, gives the starter battery up to 4 hours of trickle charging if warranted, then turns off. This is possible every day, but won’t happen unless the conditions are suitable, including that the starter battery actually needs maintenance charging. Any number of conditions can interrupt and disable the charging if they arise.
- May turn on if: the sun is up, OR shore power is connected, AND the starter battery is in low SoC AND the Domestic battery is in good SoC
- Won’t turn on, Will turn off if: the Domestic battery Voltage is too high for safe AGM charging, OR “enable/disable” switch is off, OR the ignition is on, OR the starter battery is already in good SoC, OR it’s too cold
Details:
The Node-RED flow handles logic for enabling/disabling the trickle charge circuit conditionally based on all the factors I could think of to include.
- SoC of the Domestic Battery (Smart Shunt provides)
- Voltage of Domestic and Starter batteries (Smart Shunt provides)
- Battery Temperature (MP Provides)
- Cabin Temperature in starter battery location (instead of actual temp probe on battery)
- Vehicle Ignition state (Digital Input on GX)
- Multiplus AC-In state
- Multiplus on/off/charge/invert switch state
- MPPT wattage and voltage (to infer available PV power)
- Relay state of 2 other relays (These are used as on-screen switches. They don’t physically connect to anything. They can be replaced with truly virtual switches now thanks to Venus 3.70 improvements with GUI 2.0 switch pane and Node-RED virtual switches.)
There aren’t many hardware connections. Just the minimally required signals and relay, since the switching is in software.
- The system is not isolated between Domestic battery and Starter battery. Both batteries are 12V systems. Domestic is LiFePO, Starter is AGM.
- The MP trickle charge blade is wired to the COMM pin of a relay controlled by the GX system. The starter positive circuit is connected to NO pin of that same relay.
- An ignition signal wire is connected to a digital input in the GX device via an optocoupler.
- A D+ (engine run) signal would be more appropriate, but in my case ‘Ignition On’ signal was easier available. Beware that if you have autostart or remote start, you could have a vehicle where the engine can run without the ignition being considered “on” or sending that signal. That’s why ‘Engine On’ is a better condition if available.
Pics:
The 3rd switch is really just an indicator of the physical relay state. I think this can be replaced thanks to Venus 3.70 with something that no longer appears as a toggle.
This flow uses custom-composed JS functions which may now no longer be needed thanks to the latest Node-RED update introducing features for conditional evaluation of inputs. I’ll share if I update this
The Flow:
This won’t work out of the box unless your installation is identical to mine. It could be easily reconfigured by anyone who’s already familiar with Node-RED though.
[[
{
"id": "81fa2b9bc6493eaf",
"type": "tab",
"label": "TR Charge Relay V2",
"disabled": false,
"info": "",
"env": []
},
{
"id": "a5cf09388ed0a270",
"type": "function",
"z": "81fa2b9bc6493eaf",
"name": "TR enable if Conditions Suit",
"func": "context.data = context.data || {};\n\nswitch (msg.topic) {\n case \"HV\":\n context.data.hbattv = msg.payload;\n msg = null;\n break;\n case \"HVH\":\n context.data.hvh = msg.payload;\n msg = null;\n break;\n case \"TEMPLOW\":\n context.data.templow = msg.payload;\n msg = null;\n break;\n case \"STARTVLOW\":\n context.data.stvlow = msg.payload;\n msg = null;\n break;\n case \"STARTVSUFF\":\n context.data.stvsuff = msg.payload;\n msg = null;\n break;\n case \"HSOCSUFF\":\n context.data.hsocsuff = msg.payload;\n msg = null;\n break;\n case \"SOLARVSUFF\":\n context.data.solarvsuff = msg.payload;\n msg = null;\n break;\n case \"SOLARWSUFF\":\n context.data.solarwsuff = msg.payload;\n msg = null;\n break;\n case \"INC\":\n context.data.inc = msg.payload;\n msg = null;\n break;\n case \"STRTR\":\n context.data.strtr = msg.payload;\n msg = null;\n break;\n case \"MPSW\":\n context.data.mpsw = msg.payload;\n msg = null;\n break;\n case \"MPIN\":\n context.data.mpin = msg.payload;\n msg = null;\n break;\n case \"MPPTV\":\n context.data.mppt = msg.payload;\n msg = null;\n break;\n case \"MPPTW\":\n context.data.mpptw = msg.payload;\n msg = null;\n break;\n case \"STRTV\":\n context.data.strtv = msg.payload;\n msg = null;\n break; \n case \"HSOC\":\n context.data.hsoc = msg.payload;\n msg = null;\n break;\n case \"RLY3\":\n context.data.rly3 = msg.payload;\n msg = null;\n break;\n \n default:\n msg = null;\n \tbreak;\n\n}\n\nif(context.data.templow != null && context.data.solarwsuff != null && context.data.solarvsuff != null && context.data.hsocsuff != null && context.data.stvsuff != null && context.data.stvlow != null && context.data.mpin != null && context.data.mppt != null && context.data.strtv != null && context.data.hsoc != null ) {\n \n\t if (context.data.hbattv <= context.data.hvh && context.data.strtv <= context.data.stvlow && context.data.hsoc >= context.data.hsocsuff && context.data.mpin == 240 && context.data.mppt >= context.data.solarvsuff && context.data.mpptw >= context.data.solarwsuff && context.data.rly3 != 0 && context.data.strtr == 11 && context.data.inc >= context.data.templow ){ //If: STRTV is low, HSOC is suff, No Shore connection, Solar Power Suff, No Relay/Ignition/Temp override active\n\t return [{payload:\"1\"},null] // Turn on relay\n\t \n\t } else if (context.data.hbattv <= context.data.hvh && context.data.strtv <= context.data.stvlow && context.data.hsoc >= context.data.hsocsuff && context.data.mpin == 0 && context.data.mpsw != 4 && context.data.mpsw != 2 && context.data.rly3 != 0 && context.data.strtr == 11 && context.data.inc >= context.data.templow ){ //If: HSOC is suff, Shore Power Available, No Relay/Ignition/Temp override active\n\t return [{payload:\"1\"},null] // Turn on relay\n\t \n\t } else return [null,{payload:\"0\"}] // Turn off relay if neither Solar or Shore available\n\t \n \n} else return msg; //Ends the function without sending a message if one of the context data values is not available",
"outputs": 2,
"timeout": 0,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 380,
"y": 60,
"wires": [
[
"bbdae65f71ba1fd5"
],
[]
],
"outputLabels": [
"Turn On (close) Relay",
"Turn OFF (open) Relay"
]
},
{
"id": "78949a47a7cc0944",
"type": "victron-input-solarcharger",
"z": "81fa2b9bc6493eaf",
"service": "com.victronenergy.solarcharger/289",
"path": "/Pv/V",
"serviceObj": {
"service": "com.victronenergy.solarcharger/289",
"name": "MPPT"
},
"pathObj": {
"path": "/Pv/V",
"type": "float",
"name": "PV voltage"
},
"initial": "",
"name": "MPPTV",
"onlyChanges": true,
"roundValues": "2",
"outputs": 1,
"x": 70,
"y": 440,
"wires": [
[
"a5cf09388ed0a270",
"3068583643615dda"
]
],
"outputLabels": [
"solarA"
]
},
{
"id": "eaacbc93ec829b2d",
"type": "victron-input-battery",
"z": "81fa2b9bc6493eaf",
"service": "com.victronenergy.battery/290",
"path": "/Soc",
"serviceObj": {
"service": "com.victronenergy.battery/290",
"name": "Main Shunt"
},
"pathObj": {
"path": "/Soc",
"type": "float",
"name": "State of charge (%)"
},
"name": "HSOC",
"onlyChanges": true,
"roundValues": "2",
"outputs": 1,
"x": 70,
"y": 680,
"wires": [
[
"a5cf09388ed0a270",
"3068583643615dda"
]
]
},
{
"id": "113fe5cd0fbfbfc8",
"type": "victron-input-vebus",
"z": "81fa2b9bc6493eaf",
"service": "com.victronenergy.vebus/288",
"path": "/Ac/ActiveIn/ActiveInput",
"serviceObj": {
"service": "com.victronenergy.vebus/288",
"name": "MultiPlus 12/3000/120-50 120V"
},
"pathObj": {
"path": "/Ac/ActiveIn/ActiveInput",
"type": "enum",
"name": "Active input",
"enum": {
"0": "AC Input 1",
"1": "AC Input 2",
"240": "Disconnected"
}
},
"initial": "",
"name": "MPIN",
"onlyChanges": true,
"outputs": 1,
"x": 70,
"y": 380,
"wires": [
[
"a5cf09388ed0a270",
"3068583643615dda"
]
]
},
{
"id": "6d4ebf6773b75951",
"type": "victron-input-battery",
"z": "81fa2b9bc6493eaf",
"service": "com.victronenergy.battery/290",
"path": "/Dc/1/Voltage",
"serviceObj": {
"service": "com.victronenergy.battery/290",
"name": "Main Shunt"
},
"pathObj": {
"path": "/Dc/1/Voltage",
"type": "float",
"name": "Starter battery voltage (V)"
},
"name": "STRTV",
"onlyChanges": true,
"roundValues": "2",
"outputs": 1,
"x": 70,
"y": 560,
"wires": [
[
"a5cf09388ed0a270",
"3068583643615dda"
]
]
},
{
"id": "62cb97215936fe4c",
"type": "victron-input-solarcharger",
"z": "81fa2b9bc6493eaf",
"service": "com.victronenergy.solarcharger/289",
"path": "/Yield/Power",
"serviceObj": {
"service": "com.victronenergy.solarcharger/289",
"name": "SmartSolar Charger MPPT 100/20 48V"
},
"pathObj": {
"path": "/Yield/Power",
"type": "float",
"name": "PV Power (W)"
},
"name": "MPPTW",
"onlyChanges": true,
"outputs": 1,
"x": 80,
"y": 500,
"wires": [
[
"a5cf09388ed0a270",
"3068583643615dda"
]
]
},
{
"id": "bbdae65f71ba1fd5",
"type": "change",
"z": "81fa2b9bc6493eaf",
"name": "Turn Relay On",
"rules": [
{
"t": "set",
"p": "payload",
"pt": "msg",
"to": "1",
"tot": "num"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 400,
"y": 120,
"wires": [
[
"da903eee3cc10fa5"
]
]
},
{
"id": "cc80cedd895ad30a",
"type": "comment",
"z": "81fa2b9bc6493eaf",
"name": "Features To Add Later",
"info": "To add later\n\n-Solar iradiance as a condition instead of PVW or PVV?\n--Run between 12pm and 2pm if forecast is good and PV is suff? But only in this location?\n",
"x": 1260,
"y": 400,
"wires": []
},
{
"id": "18f4af38dd73155d",
"type": "victron-input-vebus",
"z": "81fa2b9bc6493eaf",
"service": "com.victronenergy.vebus/288",
"path": "/Mode",
"serviceObj": {
"service": "com.victronenergy.vebus/288",
"name": "MultiPlus 12/3000/120-50 120V"
},
"pathObj": {
"path": "/Mode",
"type": "enum",
"name": "Switch Position",
"enum": {
"1": "Charger Only",
"2": "Inverter Only",
"3": "On",
"4": "Off"
}
},
"initial": "",
"name": "MPSW",
"onlyChanges": true,
"outputs": 1,
"x": 70,
"y": 320,
"wires": [
[
"a5cf09388ed0a270",
"3068583643615dda"
]
]
},
{
"id": "bc1fdedc5bcaf301",
"type": "victron-input-relay",
"z": "81fa2b9bc6493eaf",
"service": "com.victronenergy.system/0",
"path": "/Relay/2/State",
"serviceObj": {
"service": "com.victronenergy.system/0",
"name": "Venus system"
},
"pathObj": {
"path": "/Relay/2/State",
"type": "enum",
"name": "Venus relay 3 state",
"enum": {
"0": "Open",
"1": "Closed"
}
},
"initial": "",
"name": "RLY3",
"onlyChanges": true,
"outputs": 1,
"x": 70,
"y": 800,
"wires": [
[
"a5cf09388ed0a270",
"3068583643615dda"
]
]
},
{
"id": "1a8c62e6126a313d",
"type": "victron-input-digitalinput",
"z": "81fa2b9bc6493eaf",
"service": "com.victronenergy.digitalinput/1",
"path": "/State",
"serviceObj": {
"service": "com.victronenergy.digitalinput/1",
"name": "Engine"
},
"pathObj": {
"path": "/State",
"type": "enum",
"name": "Digital input state",
"enum": {
"0": "low",
"1": "high",
"2": "off",
"3": "on",
"4": "no",
"5": "yes",
"6": "open",
"7": "closed",
"8": "ok",
"9": "alarm",
"10": "running",
"11": "stopped"
}
},
"initial": "",
"name": "STRTR",
"onlyChanges": true,
"outputs": 1,
"x": 70,
"y": 620,
"wires": [
[
"a5cf09388ed0a270",
"3068583643615dda"
]
]
},
{
"id": "2768ab157666324c",
"type": "victron-input-temperature",
"z": "81fa2b9bc6493eaf",
"service": "com.victronenergy.temperature/102",
"path": "/Temperature",
"serviceObj": {
"service": "com.victronenergy.temperature/102",
"name": "Garage"
},
"pathObj": {
"path": "/Temperature",
"type": "float",
"name": "Temperature (°C)"
},
"name": "INC",
"onlyChanges": false,
"roundValues": "2",
"outputs": 1,
"x": 70,
"y": 920,
"wires": [
[
"a5cf09388ed0a270",
"3068583643615dda"
]
]
},
{
"id": "3068583643615dda",
"type": "function",
"z": "81fa2b9bc6493eaf",
"name": "TR Disable/Enable If Conditions Change",
"func": "context.data = context.data || {};\n\nswitch (msg.topic) {\n case \"HV\":\n context.data.hbattv = msg.payload;\n msg = null;\n break;\n case \"HVH\":\n context.data.hvh = msg.payload;\n msg = null;\n break;\n case \"TEMPLOW\":\n context.data.templow = msg.payload;\n msg = null;\n break;\n case \"STARTVLOW\":\n context.data.stvlow = msg.payload;\n msg = null;\n break;\n case \"STARTVSUFF\":\n context.data.stvsuff = msg.payload;\n msg = null;\n break;\n case \"HSOCSUFF\":\n context.data.hsocsuff = msg.payload;\n msg = null;\n break;\n case \"SOLARVSUFF\":\n context.data.solarvsuff = msg.payload;\n msg = null;\n break;\n case \"SOLARWSUFF\":\n context.data.solarwsuff = msg.payload;\n msg = null;\n break;\n case \"INC\":\n context.data.inc = msg.payload;\n msg = null;\n break;\n case \"STRTR\":\n context.data.strtr = msg.payload;\n msg = null;\n break;\n case \"MPSW\":\n context.data.mpsw = msg.payload;\n msg = null;\n break;\n case \"MPIN\":\n context.data.mpin = msg.payload;\n msg = null;\n break;\n case \"MPPTV\":\n context.data.mppt = msg.payload;\n msg = null;\n break;\n case \"MPPTW\":\n context.data.mpptw = msg.payload;\n msg = null;\n break;\n case \"STRTV\":\n context.data.strtv = msg.payload;\n msg = null;\n break; \n case \"HSOC\":\n context.data.hsoc = msg.payload;\n msg = null;\n break;\n case \"RLY3\":\n context.data.rly3 = msg.payload;\n msg = null;\n break;\n case \"RLY5\":\n context.data.rly5 = msg.payload;\n msg = null;\n break;\n \n default:\n msg = null;\n \tbreak;\n\n}\n\nif(context.data.templow != null && context.data.solarwsuff != null && context.data.solarvsuff != null && context.data.hsocsuff != null && context.data.stvsuff != null && context.data.stvlow != null && context.data.mpin != null && context.data.mppt != null && context.data.strtv != null && context.data.hsoc != null ) {\n \n\t if (context.data.hbattv > context.data.hvh){ //If: House V is higher than safe AGM charge V\n\t return [null,{payload:\"0\"}] // Turn off relay\n\t \n\t } else if (context.data.strtr != 11){ //If: Ignition on\n\t return [null,{payload:\"0\"}] // Turn off relay\n\t \n\t } else if (context.data.rly5 == 1){ //If: Relay 5 (Force) is on\n\t return [{payload:\"1\"},null] // Turn ON relay\n\t \n\t } else if (context.data.mpin == 240 && (context.data.mppt < context.data.solarvsuff || context.data.mpptw < context.data.solarwsuff)){ //If: MP is unplugged and Solar is insufficient \n\t return [null,{payload:\"0\"}] // Turn off relay\n\t \n\t } else if (context.data.hsoc < context.data.hsocsuff){ //If: HSOC is low\n\t return [null,{payload:\"0\"}] // Turn off relay\n\t \n\t } else if (context.data.rly3 == 0){ //If: Relay 3 is off\n\t return [null,{payload:\"0\"}] // Turn off relay\n\t \n\t } else if (context.data.inc < context.data.templow){ //If: Temp Low\n\t return [null,{payload:\"0\"}] // Turn off relay\n\t \n\t } else if (context.data.strtv > context.data.stvsuff){ //If: STRTV is sufficient\n\t return [null,{payload:\"0\"}] // Turn off relay\n\t \n\t } else return [null,null] // \n\t \n \n} else return msg; //Ends the function without sending a message if one of the context data values is not available",
"outputs": 2,
"timeout": 0,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 400,
"y": 380,
"wires": [
[
"c6a6d01b8bac5672"
],
[
"5b566a1c871393dc"
]
],
"outputLabels": [
"Turn On (close) Relay",
"Turn OFF (open) Relay"
]
},
{
"id": "5b566a1c871393dc",
"type": "change",
"z": "81fa2b9bc6493eaf",
"name": "Turn Relay Off",
"rules": [
{
"t": "set",
"p": "payload",
"pt": "msg",
"to": "0",
"tot": "num"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 500,
"y": 480,
"wires": [
[
"ba4e443797c61541"
]
]
},
{
"id": "ba4e443797c61541",
"type": "victron-output-relay",
"z": "81fa2b9bc6493eaf",
"service": "com.victronenergy.system/0",
"path": "/Relay/3/State",
"serviceObj": {
"service": "com.victronenergy.system/0",
"name": "Venus device"
},
"pathObj": {
"path": "/Relay/3/State",
"type": "enum",
"name": "Venus relay 4 state",
"enum": {
"0": "Open",
"1": "Closed"
},
"mode": "both"
},
"name": "TR Charge enable (relay4)",
"onlyChanges": false,
"outputs": 0,
"conditionalMode": false,
"outputTrue": "",
"outputFalse": "",
"debounce": "",
"x": 770,
"y": 200,
"wires": []
},
{
"id": "1eea511f948c3ef0",
"type": "trigger",
"z": "81fa2b9bc6493eaf",
"name": "Then Turn Off",
"op1": "",
"op2": "0",
"op1type": "pay",
"op2type": "num",
"duration": "4",
"extend": false,
"overrideDelay": false,
"units": "hr",
"reset": "",
"bytopic": "all",
"topic": "topic",
"outputs": 1,
"x": 400,
"y": 300,
"wires": [
[
"ba4e443797c61541"
]
]
},
{
"id": "da903eee3cc10fa5",
"type": "chronos-filter",
"z": "81fa2b9bc6493eaf",
"name": "Only in Daytime",
"config": "9ff882c27f5e65db",
"reference": "",
"referenceType": "absTime",
"baseTime": "",
"baseTimeType": "msgIngress",
"evaluation": "",
"evaluationType": "and",
"conditions": [
{
"operator": "between",
"operands": [
{
"type": "time",
"value": "11:00",
"offset": 0,
"random": 0,
"precision": "minute"
},
{
"type": "time",
"value": "14:00",
"offset": 0,
"random": 0,
"precision": "minute"
}
]
}
],
"x": 400,
"y": 180,
"wires": [
[
"8ca43dcd2b24449b"
]
]
},
{
"id": "8ca43dcd2b24449b",
"type": "delay",
"z": "81fa2b9bc6493eaf",
"name": "4hrs at a time",
"pauseType": "rate",
"timeout": "5",
"timeoutUnits": "seconds",
"rate": "4",
"nbRateUnits": "1",
"rateUnits": "hour",
"randomFirst": "1",
"randomLast": "5",
"randomUnits": "seconds",
"drop": true,
"allowrate": false,
"outputs": 1,
"x": 400,
"y": 240,
"wires": [
[
"1eea511f948c3ef0"
]
]
},
{
"id": "b3656b8e2b59b7a6",
"type": "inject",
"z": "81fa2b9bc6493eaf",
"name": "Start V Low",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": true,
"onceDelay": 0.1,
"topic": "STARTVLOW",
"payload": "12.50",
"payloadType": "num",
"x": 110,
"y": 120,
"wires": [
[
"a5cf09388ed0a270",
"3068583643615dda"
]
]
},
{
"id": "0e8237c23739b2fc",
"type": "inject",
"z": "81fa2b9bc6493eaf",
"name": "Start V Suff",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": true,
"onceDelay": 0.1,
"topic": "STARTVSUFF",
"payload": "14.0",
"payloadType": "num",
"x": 110,
"y": 160,
"wires": [
[
"a5cf09388ed0a270",
"3068583643615dda"
]
]
},
{
"id": "cc5ee6668f1a25ad",
"type": "inject",
"z": "81fa2b9bc6493eaf",
"name": "H SOC Suff",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": true,
"onceDelay": 0.1,
"topic": "HSOCSUFF",
"payload": "80",
"payloadType": "num",
"x": 110,
"y": 80,
"wires": [
[
"a5cf09388ed0a270",
"3068583643615dda"
]
]
},
{
"id": "3da699746765e4d2",
"type": "inject",
"z": "81fa2b9bc6493eaf",
"name": "Solar V Suff",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": true,
"onceDelay": 0.1,
"topic": "SOLARVSUFF",
"payload": "12",
"payloadType": "num",
"x": 110,
"y": 200,
"wires": [
[
"a5cf09388ed0a270",
"3068583643615dda"
]
]
},
{
"id": "dc951febe8688f87",
"type": "inject",
"z": "81fa2b9bc6493eaf",
"name": "Solar W Suff",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": true,
"onceDelay": 0.1,
"topic": "SOLARWSUFF",
"payload": "45",
"payloadType": "num",
"x": 110,
"y": 240,
"wires": [
[
"a5cf09388ed0a270",
"3068583643615dda"
]
]
},
{
"id": "ad63500891596d7d",
"type": "inject",
"z": "81fa2b9bc6493eaf",
"name": "Temp Low",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": true,
"onceDelay": 0.1,
"topic": "TEMPLOW",
"payload": "2.4",
"payloadType": "num",
"x": 110,
"y": 280,
"wires": [
[
"a5cf09388ed0a270",
"3068583643615dda"
]
]
},
{
"id": "720e344a5f0fbb1f",
"type": "victron-input-battery",
"z": "81fa2b9bc6493eaf",
"service": "com.victronenergy.battery/290",
"path": "/Dc/0/Voltage",
"serviceObj": {
"service": "com.victronenergy.battery/290",
"name": "House Batt"
},
"pathObj": {
"path": "/Dc/0/Voltage",
"type": "float",
"name": "Battery voltage (V)"
},
"name": "HV",
"onlyChanges": false,
"roundValues": "2",
"outputs": 1,
"x": 70,
"y": 740,
"wires": [
[
"3068583643615dda",
"a5cf09388ed0a270"
]
]
},
{
"id": "0360dc6640162722",
"type": "inject",
"z": "81fa2b9bc6493eaf",
"name": "H V Too high",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": true,
"onceDelay": 0.1,
"topic": "HVH",
"payload": "14.4",
"payloadType": "num",
"x": 110,
"y": 40,
"wires": [
[
"a5cf09388ed0a270",
"3068583643615dda"
]
]
},
{
"id": "bd444a5e136c15b5",
"type": "victron-input-relay",
"z": "81fa2b9bc6493eaf",
"service": "com.victronenergy.system/0",
"path": "/Relay/4/State",
"serviceObj": {
"service": "com.victronenergy.system/0",
"name": "Venus system",
"communityTag": "relay"
},
"pathObj": {
"path": "/Relay/4/State",
"type": "enum",
"name": "Venus relay 4 state",
"enum": {
"0": "Open",
"1": "Closed"
},
"mode": "both"
},
"initial": "",
"name": "RLY5",
"onlyChanges": true,
"outputs": 1,
"conditionalMode": false,
"outputTrue": "",
"outputFalse": "",
"debounce": "",
"x": 70,
"y": 860,
"wires": [
[
"3068583643615dda"
]
]
},
{
"id": "c6a6d01b8bac5672",
"type": "change",
"z": "81fa2b9bc6493eaf",
"name": "Turn Relay On (Force Only)",
"rules": [
{
"t": "set",
"p": "payload",
"pt": "msg",
"to": "1",
"tot": "num"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 460,
"y": 440,
"wires": [
[
"ba4e443797c61541"
]
]
},
{
"id": "9ff882c27f5e65db",
"type": "chronos-config",
"name": "home",
"latitudeType": "num",
"longitudeType": "num",
"timezone": "",
"timezoneType": "str",
"sunPositions": []
},
{
"id": "beed20813235410f",
"type": "global-config",
"env": [],
"modules": {
"@victronenergy/node-red-contrib-victron": "1.6.60",
"node-red-contrib-chronos": "1.29.3"
}
}
]

