diff --git a/dbus-node-red-grid-meter/grid_meter.py b/dbus-node-red-grid-meter/grid_meter.py index 4f475a6..ff83ec7 100644 --- a/dbus-node-red-grid-meter/grid_meter.py +++ b/dbus-node-red-grid-meter/grid_meter.py @@ -19,8 +19,8 @@ sys.path.insert(1, os.path.join(os.path.dirname(__file__), '/opt/victronenergy/d from vedbus import VeDbusService -class NodeRedMeterEinspeisung: - def __init__(self, servicename, deviceinstance, paths, productname='Einspeisung', connection='Node RED HTTP JSON service'): +class NodeRedMetergrid-meter: + def __init__(self, servicename, deviceinstance, paths, productname='grid-meter', connection='Node RED HTTP JSON service'): self._dbusservice = VeDbusService("{}.http_{:02d}".format(servicename, deviceinstance)) self._paths = paths @@ -97,25 +97,25 @@ class NodeRedMeterEinspeisung: meter_data = self._getNodeRedData() #send data to DBus - self._dbusservice['/Ac/Power'] = meter_data['einspeisung']['total_power'] # positive: consumption, negative: feed into grid - self._dbusservice['/Ac/Current'] = meter_data['einspeisung']['total_current'] - self._dbusservice['/Ac/L1/Voltage'] = meter_data['einspeisung']['l1_voltage'] - self._dbusservice['/Ac/L2/Voltage'] = meter_data['einspeisung']['l2_voltage'] - self._dbusservice['/Ac/L3/Voltage'] = meter_data['einspeisung']['l3_voltage'] - self._dbusservice['/Ac/L1/Current'] = meter_data['einspeisung']['l1_current'] - self._dbusservice['/Ac/L2/Current'] = meter_data['einspeisung']['l2_current'] - self._dbusservice['/Ac/L3/Current'] = meter_data['einspeisung']['l3_current'] - self._dbusservice['/Ac/L1/Power'] = meter_data['einspeisung']['l1_power'] - self._dbusservice['/Ac/L2/Power'] = meter_data['einspeisung']['l2_power'] - self._dbusservice['/Ac/L3/Power'] = meter_data['einspeisung']['l3_power'] - self._dbusservice['/Ac/L1/Energy/Forward'] = meter_data['einspeisung']['l1_import'] - self._dbusservice['/Ac/L2/Energy/Forward'] = meter_data['einspeisung']['l2_import'] - self._dbusservice['/Ac/L3/Energy/Forward'] = meter_data['einspeisung']['l3_import'] - self._dbusservice['/Ac/L1/Energy/Reverse'] = meter_data['einspeisung']['l1_export'] - self._dbusservice['/Ac/L2/Energy/Reverse'] = meter_data['einspeisung']['l2_export'] - self._dbusservice['/Ac/L3/Energy/Reverse'] = meter_data['einspeisung']['l3_export'] - self._dbusservice['/Ac/Energy/Forward'] = meter_data['einspeisung']['total_import'] - self._dbusservice['/Ac/Energy/Reverse'] = meter_data['einspeisung']['total_export'] + self._dbusservice['/Ac/Power'] = meter_data['grid-meter']['total_power'] # positive: consumption, negative: feed into grid + self._dbusservice['/Ac/Current'] = meter_data['grid-meter']['total_current'] + self._dbusservice['/Ac/L1/Voltage'] = meter_data['grid-meter']['l1_voltage'] + self._dbusservice['/Ac/L2/Voltage'] = meter_data['grid-meter']['l2_voltage'] + self._dbusservice['/Ac/L3/Voltage'] = meter_data['grid-meter']['l3_voltage'] + self._dbusservice['/Ac/L1/Current'] = meter_data['grid-meter']['l1_current'] + self._dbusservice['/Ac/L2/Current'] = meter_data['grid-meter']['l2_current'] + self._dbusservice['/Ac/L3/Current'] = meter_data['grid-meter']['l3_current'] + self._dbusservice['/Ac/L1/Power'] = meter_data['grid-meter']['l1_power'] + self._dbusservice['/Ac/L2/Power'] = meter_data['grid-meter']['l2_power'] + self._dbusservice['/Ac/L3/Power'] = meter_data['grid-meter']['l3_power'] + self._dbusservice['/Ac/L1/Energy/Forward'] = meter_data['grid-meter']['l1_import'] + self._dbusservice['/Ac/L2/Energy/Forward'] = meter_data['grid-meter']['l2_import'] + self._dbusservice['/Ac/L3/Energy/Forward'] = meter_data['grid-meter']['l3_import'] + self._dbusservice['/Ac/L1/Energy/Reverse'] = meter_data['grid-meter']['l1_export'] + self._dbusservice['/Ac/L2/Energy/Reverse'] = meter_data['grid-meter']['l2_export'] + self._dbusservice['/Ac/L3/Energy/Reverse'] = meter_data['grid-meter']['l3_export'] + self._dbusservice['/Ac/Energy/Forward'] = meter_data['grid-meter']['total_import'] + self._dbusservice['/Ac/Energy/Reverse'] = meter_data['grid-meter']['total_export'] #logging logging.debug("House Consumption (/Ac/Power): %s" % (self._dbusservice['/Ac/Power'])) @@ -167,7 +167,7 @@ def main(): _v = lambda p, v: (str(round(v, 1)) + ' V') #start our main-service - pvac_output = NodeRedMeterEinspeisung( + pvac_output = NodeRedMetergrid-meter( servicename='com.victronenergy.grid', deviceinstance=40, paths={ diff --git a/node-red-flows/meters.json b/node-red-flows/meters.json index 79be5ba..58b1980 100644 --- a/node-red-flows/meters.json +++ b/node-red-flows/meters.json @@ -111,7 +111,7 @@ "type": "function", "z": "f96eea4d4a3a345d", "name": "Create java objects", - "func": "var einspeisung_total_power = parseFloat(global.get(\"einspeisung_total_power\"))\n\nvar einspeisung_l1_voltage = parseFloat(global.get(\"einspeisung_l1_voltage\"))\nvar einspeisung_l2_voltage = parseFloat(global.get(\"einspeisung_l2_voltage\"))\nvar einspeisung_l3_voltage = parseFloat(global.get(\"einspeisung_l3_voltage\"))\n\nvar einspeisung_l1_current = parseFloat(global.get(\"einspeisung_l1_current\"))\nvar einspeisung_l2_current = parseFloat(global.get(\"einspeisung_l2_current\"))\nvar einspeisung_l3_current = parseFloat(global.get(\"einspeisung_l3_current\"))\n\nvar einspeisung_l1_power = parseFloat(global.get(\"einspeisung_l1_power\"))\nvar einspeisung_l2_power = parseFloat(global.get(\"einspeisung_l2_power\"))\nvar einspeisung_l3_power = parseFloat(global.get(\"einspeisung_l3_power\"))\n\nvar einspeisung_l1_import = parseFloat(global.get(\"einspeisung_l1_import\"))\nvar einspeisung_l2_import = parseFloat(global.get(\"einspeisung_l2_import\"))\nvar einspeisung_l3_import = parseFloat(global.get(\"einspeisung_l3_import\"))\n\nvar einspeisung_l1_export = parseFloat(global.get(\"einspeisung_l1_export\"))\nvar einspeisung_l2_export = parseFloat(global.get(\"einspeisung_l2_export\"))\nvar einspeisung_l3_export = parseFloat(global.get(\"einspeisung_l3_export\"))\n\n//Totals\nvar einspeisung_total_current = einspeisung_l1_current + einspeisung_l2_current + einspeisung_l3_current\nvar einspeisung_total_import = parseFloat(global.get(\"einspeisung_total_import\"))\nvar einspeisung_total_export = parseFloat(global.get(\"einspeisung_total_export\"))\n\nmsg.payload.einspeisung = {total_power:einspeisung_total_power, total_current:einspeisung_total_current, total_import:einspeisung_total_import, total_export:einspeisung_total_export, l1_voltage:einspeisung_l1_voltage, l2_voltage:einspeisung_l2_voltage, l3_voltage:einspeisung_l3_voltage, l1_current:einspeisung_l1_current, l2_current:einspeisung_l2_current, l3_current:einspeisung_l3_current, l1_power:einspeisung_l1_power, l2_power:einspeisung_l2_power, l3_power:einspeisung_l3_power, l1_import:einspeisung_l1_import, l2_import:einspeisung_l2_import, l3_import:einspeisung_l3_import, l1_export:einspeisung_l1_export, l2_export:einspeisung_l2_export, l3_export:einspeisung_l3_export};\n\nreturn msg;", + "func": "var grid_total_power = parseFloat(global.get(\"grid_total_power\"))\n\nvar grid_l1_voltage = parseFloat(global.get(\"grid_l1_voltage\"))\nvar grid_l2_voltage = parseFloat(global.get(\"grid_l2_voltage\"))\nvar grid_l3_voltage = parseFloat(global.get(\"grid_l3_voltage\"))\n\nvar grid_l1_current = parseFloat(global.get(\"grid_l1_current\"))\nvar grid_l2_current = parseFloat(global.get(\"grid_l2_current\"))\nvar grid_l3_current = parseFloat(global.get(\"grid_l3_current\"))\n\nvar grid_l1_power = parseFloat(global.get(\"grid_l1_power\"))\nvar grid_l2_power = parseFloat(global.get(\"grid_l2_power\"))\nvar grid_l3_power = parseFloat(global.get(\"grid_l3_power\"))\n\nvar grid_l1_import = parseFloat(global.get(\"grid_l1_import\"))\nvar grid_l2_import = parseFloat(global.get(\"grid_l2_import\"))\nvar grid_l3_import = parseFloat(global.get(\"grid_l3_import\"))\n\nvar grid_l1_export = parseFloat(global.get(\"grid_l1_export\"))\nvar grid_l2_export = parseFloat(global.get(\"grid_l2_export\"))\nvar grid_l3_export = parseFloat(global.get(\"grid_l3_export\"))\n\n//Totals\nvar grid_total_current = grid_l1_current + grid_l2_current + grid_l3_current\nvar grid_total_import = parseFloat(global.get(\"grid_total_import\"))\nvar grid_total_export = parseFloat(global.get(\"grid_total_export\"))\n\nmsg.payload.grid = {total_power:grid_total_power, total_current:grid_total_current, total_import:grid_total_import, total_export:grid_total_export, l1_voltage:grid_l1_voltage, l2_voltage:grid_l2_voltage, l3_voltage:grid_l3_voltage, l1_current:grid_l1_current, l2_current:grid_l2_current, l3_current:grid_l3_current, l1_power:grid_l1_power, l2_power:grid_l2_power, l3_power:grid_l3_power, l1_import:grid_l1_import, l2_import:grid_l2_import, l3_import:grid_l3_import, l1_export:grid_l1_export, l2_export:grid_l2_export, l3_export:grid_l3_export};\n\nreturn msg;", "outputs": 1, "noerr": 0, "initialize": "", @@ -168,7 +168,7 @@ "type": "function", "z": "f96eea4d4a3a345d", "name": "format and save to global var", - "func": "temp = parseFloat(msg.payload * 0.1).toFixed(1);\nglobal.set(\"einspeisung_l1_voltage\", temp)\nreturn msg;", + "func": "temp = parseFloat(msg.payload * 0.1).toFixed(1);\nglobal.set(\"grid_l1_voltage\", temp)\nreturn msg;", "outputs": 1, "noerr": 0, "initialize": "", @@ -207,7 +207,7 @@ "type": "function", "z": "f96eea4d4a3a345d", "name": "format and save to global var", - "func": "temp = parseFloat(msg.payload * 0.1).toFixed(1);\nglobal.set(\"einspeisung_l2_voltage\", temp)\nreturn msg;", + "func": "temp = parseFloat(msg.payload * 0.1).toFixed(1);\nglobal.set(\"grid_l2_voltage\", temp)\nreturn msg;", "outputs": 1, "noerr": 0, "initialize": "", @@ -246,7 +246,7 @@ "type": "function", "z": "f96eea4d4a3a345d", "name": "format and save to global var", - "func": "temp = parseFloat(msg.payload * 0.1).toFixed(1);\nglobal.set(\"einspeisung_l3_voltage\", temp)\nreturn msg;", + "func": "temp = parseFloat(msg.payload * 0.1).toFixed(1);\nglobal.set(\"grid_l3_voltage\", temp)\nreturn msg;", "outputs": 1, "noerr": 0, "initialize": "", @@ -285,7 +285,7 @@ "type": "function", "z": "f96eea4d4a3a345d", "name": "format and save to global var", - "func": "temp = parseFloat(msg.payload * 0.001).toFixed(1);\nglobal.set(\"einspeisung_l1_current\", temp)\nreturn msg;", + "func": "temp = parseFloat(msg.payload * 0.001).toFixed(1);\nglobal.set(\"grid_l1_current\", temp)\nreturn msg;", "outputs": 1, "noerr": 0, "initialize": "", @@ -324,7 +324,7 @@ "type": "function", "z": "f96eea4d4a3a345d", "name": "format and save to global var", - "func": "temp = parseFloat(msg.payload * 0.001).toFixed(1);\nglobal.set(\"einspeisung_l2_current\", temp)\nreturn msg;", + "func": "temp = parseFloat(msg.payload * 0.001).toFixed(1);\nglobal.set(\"grid_l2_current\", temp)\nreturn msg;", "outputs": 1, "noerr": 0, "initialize": "", @@ -363,7 +363,7 @@ "type": "function", "z": "f96eea4d4a3a345d", "name": "format and save to global var", - "func": "temp = parseFloat(msg.payload * 0.001).toFixed(1);\nglobal.set(\"einspeisung_l3_current\", temp)\nreturn msg;", + "func": "temp = parseFloat(msg.payload * 0.001).toFixed(1);\nglobal.set(\"grid_l3_current\", temp)\nreturn msg;", "outputs": 1, "noerr": 0, "initialize": "", @@ -402,7 +402,7 @@ "type": "function", "z": "f96eea4d4a3a345d", "name": "format and save to global var", - "func": "temp = parseFloat(msg.payload * 0.1).toFixed(1);\nglobal.set(\"einspeisung_l1_power\", temp);\nmsg.payload = parseFloat(temp);\nreturn msg;", + "func": "temp = parseFloat(msg.payload * 0.1).toFixed(1);\nglobal.set(\"grid_l1_power\", temp);\nmsg.payload = parseFloat(temp);\nreturn msg;", "outputs": 1, "noerr": 0, "initialize": "", @@ -443,7 +443,7 @@ "type": "function", "z": "f96eea4d4a3a345d", "name": "format and save to global var", - "func": "temp = parseFloat(msg.payload * 0.1).toFixed(1);\nglobal.set(\"einspeisung_l2_power\", temp);\nmsg.payload = parseFloat(temp);\nreturn msg;", + "func": "temp = parseFloat(msg.payload * 0.1).toFixed(1);\nglobal.set(\"grid_l2_power\", temp);\nmsg.payload = parseFloat(temp);\nreturn msg;", "outputs": 1, "noerr": 0, "initialize": "", @@ -484,7 +484,7 @@ "type": "function", "z": "f96eea4d4a3a345d", "name": "format and save to global var", - "func": "temp = parseFloat(msg.payload * 0.1).toFixed(1);\nglobal.set(\"einspeisung_l3_power\", temp);\nmsg.payload = parseFloat(temp);\nreturn msg;", + "func": "temp = parseFloat(msg.payload * 0.1).toFixed(1);\nglobal.set(\"grid_l3_power\", temp);\nmsg.payload = parseFloat(temp);\nreturn msg;", "outputs": 1, "noerr": 0, "initialize": "", @@ -525,7 +525,7 @@ "type": "function", "z": "f96eea4d4a3a345d", "name": "format and save to global var", - "func": "temp = parseFloat(msg.payload * 0.1).toFixed(1);\nglobal.set(\"einspeisung_total_power\", temp);\nmsg.payload = parseFloat(temp);\nreturn msg;", + "func": "temp = parseFloat(msg.payload * 0.1).toFixed(1);\nglobal.set(\"grid_total_power\", temp);\nmsg.payload = parseFloat(temp);\nreturn msg;", "outputs": 1, "noerr": 0, "initialize": "", @@ -573,7 +573,7 @@ "type": "function", "z": "f96eea4d4a3a345d", "name": "Calculate kWh of sum power", - "func": "//init counters if not defined\nif (global.get(\"einspeisung_total_import\") === undefined) {\n global.set(\"einspeisung_total_import\", 0);\n}\nif (global.get(\"einspeisung_total_export\") === undefined) {\n global.set(\"einspeisung_total_export\", 0);\n}\n//get counters from global variable\nvar total_import = global.get(\"einspeisung_total_import\");\nvar total_export = global.get(\"einspeisung_total_export\");\nvar check = \"Nothing\";\n\n//check if usage (payload) is positive=import or negative=export\n//add diff to import or export counters\nif (msg.payload < 0) {\n total_export += Math.abs(msg.payload);\n check = \"Export: \" + Math.abs(msg.payload) + \" kWh\";\n}\nif (msg.payload > 0) {\n total_import += Math.abs(msg.payload);\n check = \"Import: \" + Math.abs(msg.payload) + \" kWh\";\n}\n\n//write result back to global vars and send a msg for debug\nglobal.set(\"einspeisung_total_import\", total_import);\nglobal.set(\"einspeisung_total_export\", total_export);\nmsg.payload = {total_import: total_import, total_export: total_export, check: check}\nreturn msg;", + "func": "//init counters if not defined\nif (global.get(\"grid_total_import\") === undefined) {\n global.set(\"grid_total_import\", 0);\n}\nif (global.get(\"grid_total_export\") === undefined) {\n global.set(\"grid_total_export\", 0);\n}\n//get counters from global variable\nvar total_import = global.get(\"grid_total_import\");\nvar total_export = global.get(\"grid_total_export\");\nvar check = \"Nothing\";\n\n//check if usage (payload) is positive=import or negative=export\n//add diff to import or export counters\nif (msg.payload < 0) {\n total_export += Math.abs(msg.payload);\n check = \"Export: \" + Math.abs(msg.payload) + \" kWh\";\n}\nif (msg.payload > 0) {\n total_import += Math.abs(msg.payload);\n check = \"Import: \" + Math.abs(msg.payload) + \" kWh\";\n}\n\n//write result back to global vars and send a msg for debug\nglobal.set(\"grid_total_import\", total_import);\nglobal.set(\"grid_total_export\", total_export);\nmsg.payload = {total_import: total_import, total_export: total_export, check: check}\nreturn msg;", "outputs": 1, "noerr": 0, "initialize": "", @@ -606,7 +606,7 @@ "type": "function", "z": "f96eea4d4a3a345d", "name": "Init variables", - "func": "global.set(\"einspeisung_total_import\", 0);\nglobal.set(\"einspeisung_total_export\", 0);\nglobal.set(\"einspeisung_l1_import\", 0);\nglobal.set(\"einspeisung_l2_import\", 0);\nglobal.set(\"einspeisung_l3_import\", 0);\nglobal.set(\"einspeisung_l1_export\", 0);\nglobal.set(\"einspeisung_l2_export\", 0);\nglobal.set(\"einspeisung_l3_export\", 0);\nreturn msg;", + "func": "global.set(\"grid_total_import\", 0);\nglobal.set(\"grid_total_export\", 0);\nglobal.set(\"grid_l1_import\", 0);\nglobal.set(\"grid_l2_import\", 0);\nglobal.set(\"grid_l3_import\", 0);\nglobal.set(\"grid_l1_export\", 0);\nglobal.set(\"grid_l2_export\", 0);\nglobal.set(\"grid_l3_export\", 0);\nreturn msg;", "outputs": 1, "noerr": 0, "initialize": "", @@ -700,7 +700,7 @@ "type": "function", "z": "f96eea4d4a3a345d", "name": "Calculate kWh of phase 1 power", - "func": "//init counters if not defined\nif (global.get(\"einspeisung_l1_import\") === undefined) {\n global.set(\"einspeisung_l1_import\", 0);\n}\nif (global.get(\"einspeisung_l1_export\") === undefined) {\n global.set(\"einspeisung_l1_export\", 0);\n}\n//get counters from global variable\nvar total_import = global.get(\"einspeisung_l1_import\");\nvar total_export = global.get(\"einspeisung_l1_export\");\nvar check = \"Nothing\";\n\n//check if usage (payload) is positive=import or negative=export\n//add diff to import or export counters\nif (msg.payload < 0) {\n total_export += Math.abs(msg.payload);\n check = \"Export: \" + Math.abs(msg.payload) + \" kWh\";\n}\nif (msg.payload > 0) {\n total_import += Math.abs(msg.payload);\n check = \"Import: \" + Math.abs(msg.payload) + \" kWh\";\n}\n//write result back to global vars and send a msg for debug\nglobal.set(\"einspeisung_l1_import\", total_import);\nglobal.set(\"einspeisung_l1_export\", total_export);\nmsg.payload = {total_import: total_import, total_export: total_export, check: check}\nreturn msg;", + "func": "//init counters if not defined\nif (global.get(\"grid_l1_import\") === undefined) {\n global.set(\"grid_l1_import\", 0);\n}\nif (global.get(\"grid_l1_export\") === undefined) {\n global.set(\"grid_l1_export\", 0);\n}\n//get counters from global variable\nvar total_import = global.get(\"grid_l1_import\");\nvar total_export = global.get(\"grid_l1_export\");\nvar check = \"Nothing\";\n\n//check if usage (payload) is positive=import or negative=export\n//add diff to import or export counters\nif (msg.payload < 0) {\n total_export += Math.abs(msg.payload);\n check = \"Export: \" + Math.abs(msg.payload) + \" kWh\";\n}\nif (msg.payload > 0) {\n total_import += Math.abs(msg.payload);\n check = \"Import: \" + Math.abs(msg.payload) + \" kWh\";\n}\n//write result back to global vars and send a msg for debug\nglobal.set(\"grid_l1_import\", total_import);\nglobal.set(\"grid_l1_export\", total_export);\nmsg.payload = {total_import: total_import, total_export: total_export, check: check}\nreturn msg;", "outputs": 1, "noerr": 0, "initialize": "", @@ -717,7 +717,7 @@ "type": "function", "z": "f96eea4d4a3a345d", "name": "Calculate kWh of phase 2 power", - "func": "//init counters if not defined\nif (global.get(\"einspeisung_l2_import\") === undefined) {\n global.set(\"einspeisung_l2_import\", 0);\n}\nif (global.get(\"einspeisung_l2_export\") === undefined) {\n global.set(\"einspeisung_l2_export\", 0);\n}\n//get counters from global variable\nvar total_import = global.get(\"einspeisung_l2_import\");\nvar total_export = global.get(\"einspeisung_l2_export\");\nvar check = \"Nothing\";\n\n//check if usage (payload) is positive=import or negative=export\n//add diff to import or export counters\nif (msg.payload < 0) {\n total_export += Math.abs(msg.payload);\n check = \"Export: \" + Math.abs(msg.payload) + \" kWh\";\n}\nif (msg.payload > 0) {\n total_import += Math.abs(msg.payload);\n check = \"Import: \" + Math.abs(msg.payload) + \" kWh\";\n}\n\n//write result back to global vars and send a msg for debug\nglobal.set(\"einspeisung_l2_import\", total_import);\nglobal.set(\"einspeisung_l2_export\", total_export);\nmsg.payload = {total_import: total_import, total_export: total_export, check: check}\nreturn msg;", + "func": "//init counters if not defined\nif (global.get(\"grid_l2_import\") === undefined) {\n global.set(\"grid_l2_import\", 0);\n}\nif (global.get(\"grid_l2_export\") === undefined) {\n global.set(\"grid_l2_export\", 0);\n}\n//get counters from global variable\nvar total_import = global.get(\"grid_l2_import\");\nvar total_export = global.get(\"grid_l2_export\");\nvar check = \"Nothing\";\n\n//check if usage (payload) is positive=import or negative=export\n//add diff to import or export counters\nif (msg.payload < 0) {\n total_export += Math.abs(msg.payload);\n check = \"Export: \" + Math.abs(msg.payload) + \" kWh\";\n}\nif (msg.payload > 0) {\n total_import += Math.abs(msg.payload);\n check = \"Import: \" + Math.abs(msg.payload) + \" kWh\";\n}\n\n//write result back to global vars and send a msg for debug\nglobal.set(\"grid_l2_import\", total_import);\nglobal.set(\"grid_l2_export\", total_export);\nmsg.payload = {total_import: total_import, total_export: total_export, check: check}\nreturn msg;", "outputs": 1, "noerr": 0, "initialize": "", @@ -734,7 +734,7 @@ "type": "function", "z": "f96eea4d4a3a345d", "name": "Calculate kWh of phase 3 power", - "func": "//init counters if not defined\nif (global.get(\"einspeisung_l3_import\") === undefined) {\n global.set(\"einspeisung_l3_import\", 0);\n}\nif (global.get(\"einspeisung_l3_export\") === undefined) {\n global.set(\"einspeisung_l3_export\", 0);\n}\n//get counters from global variable\nvar total_import = global.get(\"einspeisung_l3_import\");\nvar total_export = global.get(\"einspeisung_l3_export\");\nvar check = \"Nothing\";\n\n//check if usage (payload) is positive=import or negative=export\n//add diff to import or export counters\nif (msg.payload < 0) {\n total_export += Math.abs(msg.payload);\n check = \"Export: \" + Math.abs(msg.payload) + \" kWh\";\n}\nif (msg.payload > 0) {\n total_import += Math.abs(msg.payload);\n check = \"Import: \" + Math.abs(msg.payload) + \" kWh\";\n}\n\n//write result back to global vars and send a msg for debug\nglobal.set(\"einspeisung_l3_import\", total_import);\nglobal.set(\"einspeisung_l3_export\", total_export);\nmsg.payload = {total_import: total_import, total_export: total_export, check: check}\nreturn msg;", + "func": "//init counters if not defined\nif (global.get(\"grid_l3_import\") === undefined) {\n global.set(\"grid_l3_import\", 0);\n}\nif (global.get(\"grid_l3_export\") === undefined) {\n global.set(\"grid_l3_export\", 0);\n}\n//get counters from global variable\nvar total_import = global.get(\"grid_l3_import\");\nvar total_export = global.get(\"grid_l3_export\");\nvar check = \"Nothing\";\n\n//check if usage (payload) is positive=import or negative=export\n//add diff to import or export counters\nif (msg.payload < 0) {\n total_export += Math.abs(msg.payload);\n check = \"Export: \" + Math.abs(msg.payload) + \" kWh\";\n}\nif (msg.payload > 0) {\n total_import += Math.abs(msg.payload);\n check = \"Import: \" + Math.abs(msg.payload) + \" kWh\";\n}\n\n//write result back to global vars and send a msg for debug\nglobal.set(\"grid_l3_import\", total_import);\nglobal.set(\"grid_l3_export\", total_export);\nmsg.payload = {total_import: total_import, total_export: total_export, check: check}\nreturn msg;", "outputs": 1, "noerr": 0, "initialize": "",