[ { "id": "d416ea959b41ee48", "type": "tab", "label": "Tasmota Grid", "disabled": true, "info": "", "env": [] }, { "id": "be9d50470e4c8a7e", "type": "mqtt in", "z": "d416ea959b41ee48", "name": "", "topic": "", "qos": "2", "datatype": "auto-detect", "broker": "15a93f746a700cc5", "nl": false, "rap": true, "rh": 0, "inputs": 0, "x": 170, "y": 120, "wires": [ [ "b38884d7d55961ab" ] ] }, { "id": "9a49ff868b819c7d", "type": "function", "z": "d416ea959b41ee48", "name": "Power Curr", "func": "// Prüfen, ob das SML-Objekt und Power_curr existieren\nif (msg.payload && msg.payload.sn.SML && msg.payload.sn.SML.Power_curr !== undefined) {\n \n // Extrahiere den aktuellen Leistungswert\n let power = msg.payload.sn.SML.Power_curr;\n \n // Setze den Wert als neuen Payload (als Zahl)\n msg.payload = {\n \"/Ac/Power\": power\n };\n return msg;\n}\n\n// Falls der Wert nicht im Datensatz war, ignoriere die Nachricht\nreturn null;\n", "outputs": 1, "timeout": 0, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 550, "y": 80, "wires": [ [ "8f3fdbaba201d5f2", "068edfdc98a2371a" ] ] }, { "id": "b38884d7d55961ab", "type": "json", "z": "d416ea959b41ee48", "name": "", "property": "payload", "action": "obj", "pretty": false, "x": 230, "y": 280, "wires": [ [ "9a49ff868b819c7d", "3802d5fcdc8a4ef4", "85a9647d4bca99a5", "1f207d817fc98a5a", "4febd103872b3562", "dfa257cf1e107619", "1e2c2bac451033ae", "ac629c7f9bd45664", "93bfb161d28db9e7", "c79ab28e0cfe407f", "50255c274dac212a", "fd5c9f319367ec5c", "21e938ad1afcc72d" ] ] }, { "id": "3802d5fcdc8a4ef4", "type": "function", "z": "d416ea959b41ee48", "name": "Total_in", "func": "// Prüfen, ob das SML-Objekt und Power_curr existieren\nif (msg.payload && msg.payload.sn.SML && msg.payload.sn.SML.Total_in !== undefined) {\n \n // Extrahiere den aktuellen Leistungswert\n let power = msg.payload.sn.SML.Total_in;\n \n // Setze den Wert als neuen Payload (als Zahl)\n msg.payload = {\n \"/Ac/Energy/Forward\": power\n };\n \n return msg;\n}\n\n// Falls der Wert nicht im Datensatz war, ignoriere die Nachricht\nreturn null;\n", "outputs": 1, "timeout": 0, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 540, "y": 120, "wires": [ [ "8f3fdbaba201d5f2" ] ] }, { "id": "85a9647d4bca99a5", "type": "function", "z": "d416ea959b41ee48", "name": "Total_out", "func": "// Prüfen, ob das SML-Objekt und Power_curr existieren\nif (msg.payload && msg.payload.sn.SML && msg.payload.sn.SML.Total_out !== undefined) {\n \n // Extrahiere den aktuellen Leistungswert\n let power = msg.payload.sn.SML.Total_out;\n \n // Setze den Wert als neuen Payload (als Zahl)\n msg.payload = {\n \"/Ac/Energy/Reverse\": power\n };\n \n return msg;\n}\n\n// Falls der Wert nicht im Datensatz war, ignoriere die Nachricht\nreturn null;\n", "outputs": 1, "timeout": 0, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 540, "y": 160, "wires": [ [ "8f3fdbaba201d5f2" ] ] }, { "id": "1f207d817fc98a5a", "type": "function", "z": "d416ea959b41ee48", "name": "Volt_p1", "func": "// Prüfen, ob das SML-Objekt und Power_curr existieren\nif (msg.payload && msg.payload.sn.SML && msg.payload.sn.SML.Volt_p1 !== undefined) {\n \n // Extrahiere den aktuellen Leistungswert\n let power = msg.payload.sn.SML.Volt_p1;\n \n // Setze den Wert als neuen Payload (als Zahl)\n msg.payload = {\n \"/Ac/L3/Voltage\": power\n };\n \n \n \n return msg;\n}\n\n// Falls der Wert nicht im Datensatz war, ignoriere die Nachricht\nreturn null;\n", "outputs": 1, "timeout": 0, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 540, "y": 200, "wires": [ [ "8f3fdbaba201d5f2" ] ] }, { "id": "4febd103872b3562", "type": "function", "z": "d416ea959b41ee48", "name": "Volt_p2", "func": "// Prüfen, ob das SML-Objekt und Power_curr existieren\nif (msg.payload && msg.payload.sn.SML && msg.payload.sn.SML.Volt_p2 !== undefined) {\n \n // Extrahiere den aktuellen Leistungswert\n let power = msg.payload.sn.SML.Volt_p2;\n \n // Setze den Wert als neuen Payload (als Zahl)\n msg.payload = {\n \"/Ac/L2/Voltage\": power\n };\n \n return msg;\n}\n\n// Falls der Wert nicht im Datensatz war, ignoriere die Nachricht\nreturn null;\n", "outputs": 1, "timeout": 0, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 540, "y": 240, "wires": [ [ "8f3fdbaba201d5f2" ] ] }, { "id": "dfa257cf1e107619", "type": "function", "z": "d416ea959b41ee48", "name": "Volt_p3", "func": "// Prüfen, ob das SML-Objekt und Power_curr existieren\nif (msg.payload && msg.payload.sn.SML && msg.payload.sn.SML.Volt_p3 !== undefined) {\n \n // Extrahiere den aktuellen Leistungswert\n let power = msg.payload.sn.SML.Volt_p3;\n \n // Setze den Wert als neuen Payload (als Zahl)\n // L1 und L3 werden vertauscht, da der Multiplus an L3 hängt\n msg.payload = {\n \"/Ac/L1/Voltage\": power\n };\n \n return msg;\n}\n\n// Falls der Wert nicht im Datensatz war, ignoriere die Nachricht\nreturn null;\n", "outputs": 1, "timeout": 0, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 540, "y": 280, "wires": [ [ "8f3fdbaba201d5f2" ] ] }, { "id": "1e2c2bac451033ae", "type": "function", "z": "d416ea959b41ee48", "name": "Amperage_p1", "func": "// Prüfen, ob das SML-Objekt und Power_curr existieren\nif (msg.payload && msg.payload.sn.SML && msg.payload.sn.SML.Amperage_p1 !== undefined) {\n \n // Extrahiere den aktuellen Leistungswert\n let power = msg.payload.sn.SML.Amperage_p1;\n \n // Setze den Wert als neuen Payload (als Zahl)\n // L1 und L3 werden vertauscht, da der Multiplus an L3 hängt\n msg.payload = {\n \"/Ac/L3/Current\": power\n };\n \n return msg;\n}\n\n// Falls der Wert nicht im Datensatz war, ignoriere die Nachricht\nreturn null;\n", "outputs": 1, "timeout": 0, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 560, "y": 320, "wires": [ [ "8f3fdbaba201d5f2" ] ] }, { "id": "ac629c7f9bd45664", "type": "function", "z": "d416ea959b41ee48", "name": "Amperage_p1", "func": "// Prüfen, ob das SML-Objekt und Power_curr existieren\nif (msg.payload && msg.payload.sn.SML && msg.payload.sn.SML.Amperage_p2 !== undefined) {\n \n // Extrahiere den aktuellen Leistungswert\n let power = msg.payload.sn.SML.Amperage_p2;\n \n // Setze den Wert als neuen Payload (als Zahl)\n // L1 und L3 werden vertauscht, da der Multiplus an L3 hängt\n msg.payload = {\n \"/Ac/L2/Current\": power\n };\n \n return msg;\n}\n\n// Falls der Wert nicht im Datensatz war, ignoriere die Nachricht\nreturn null;\n", "outputs": 1, "timeout": 0, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 560, "y": 360, "wires": [ [ "8f3fdbaba201d5f2" ] ] }, { "id": "93bfb161d28db9e7", "type": "function", "z": "d416ea959b41ee48", "name": "Amperage_p3", "func": "// Prüfen, ob das SML-Objekt und Power_curr existieren\nif (msg.payload && msg.payload.sn.SML && msg.payload.sn.SML.Amperage_p3 !== undefined) {\n \n // Extrahiere den aktuellen Leistungswert\n let power = msg.payload.sn.SML.Amperage_p3;\n \n // Setze den Wert als neuen Payload (als Zahl)\n // L1 und L3 werden vertauscht, da der Multiplus an L3 hängt\n msg.payload = {\n \"/Ac/L1/Current\": power\n };\n \n return msg;\n}\n\n// Falls der Wert nicht im Datensatz war, ignoriere die Nachricht\nreturn null;\n", "outputs": 1, "timeout": 0, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 560, "y": 400, "wires": [ [ "8f3fdbaba201d5f2" ] ] }, { "id": "c79ab28e0cfe407f", "type": "function", "z": "d416ea959b41ee48", "name": "Power_curr_p1", "func": "// Prüfen, ob das SML-Objekt und Power_curr existieren\nif (msg.payload && msg.payload.sn.SML && msg.payload.sn.SML.Power_curr_p1 !== undefined) {\n \n // Extrahiere den aktuellen Leistungswert\n let power = msg.payload.sn.SML.Power_curr_p1;\n \n // Setze den Wert als neuen Payload (als Zahl)\n \n msg.payload = {\n \"/Ac/L1/Power\": power\n };\n \n return msg;\n}\n\n// Falls der Wert nicht im Datensatz war, ignoriere die Nachricht\nreturn null;\n", "outputs": 1, "timeout": 0, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 560, "y": 440, "wires": [ [ "8f3fdbaba201d5f2", "068edfdc98a2371a" ] ] }, { "id": "50255c274dac212a", "type": "function", "z": "d416ea959b41ee48", "name": "Power_curr_p2", "func": "// Prüfen, ob das SML-Objekt und Power_curr existieren\nif (msg.payload && msg.payload.sn.SML && msg.payload.sn.SML.Power_curr_p2 !== undefined) {\n \n // Extrahiere den aktuellen Leistungswert\n let power = msg.payload.sn.SML.Power_curr_p2;\n \n // Setze den Wert als neuen Payload (als Zahl)\n // L1 und L3 werden vertauscht, da der Multiplus an L3 hängt\n msg.payload = {\n \"/Ac/L2/Power\": power\n };\n \n return msg;\n}\n\n// Falls der Wert nicht im Datensatz war, ignoriere die Nachricht\nreturn null;\n", "outputs": 1, "timeout": 0, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 560, "y": 480, "wires": [ [ "8f3fdbaba201d5f2", "068edfdc98a2371a" ] ] }, { "id": "fd5c9f319367ec5c", "type": "function", "z": "d416ea959b41ee48", "name": "Power_curr_p3", "func": "// Prüfen, ob das SML-Objekt und Power_curr existieren\nif (msg.payload && msg.payload.sn.SML && msg.payload.sn.SML.Power_curr_p3 !== undefined) {\n \n // Extrahiere den aktuellen Leistungswert\n let power = msg.payload.sn.SML.Power_curr_p3;\n \n // Setze den Wert als neuen Payload (als Zahl)\n \n msg.payload = {\n \"/Ac/L3/Power\": power\n };\n \n return msg;\n}\n\n// Falls der Wert nicht im Datensatz war, ignoriere die Nachricht\nreturn null;\n", "outputs": 1, "timeout": 0, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 560, "y": 520, "wires": [ [ "8f3fdbaba201d5f2", "068edfdc98a2371a" ] ] }, { "id": "21e938ad1afcc72d", "type": "function", "z": "d416ea959b41ee48", "name": "frequency", "func": "// Prüfen, ob das SML-Objekt und Power_curr existieren\nif (msg.payload && msg.payload.sn.SML && msg.payload.sn.SML.frequency !== undefined) {\n \n // Extrahiere den aktuellen Leistungswert\n let power = msg.payload.sn.SML.frequency;\n \n // Setze den Wert als neuen Payload (als Zahl)\n msg.payload = {\n \"/Ac/Frequency\": power\n };\n \n return msg;\n}\n\n// Falls der Wert nicht im Datensatz war, ignoriere die Nachricht\nreturn null;\n", "outputs": 1, "timeout": 0, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 540, "y": 560, "wires": [ [ "8f3fdbaba201d5f2" ] ] }, { "id": "8f3fdbaba201d5f2", "type": "victron-virtual", "z": "d416ea959b41ee48", "name": "Tasmota", "outputs": 1, "device": "grid", "default_values": true, "acload_nrofphases": 1, "enable_s2support": false, "battery_capacity": 25, "include_battery_temperature": false, "battery_voltage_preset": "24", "battery_voltage_custom": 24, "generator_type": "ac", "generator_nrofphases": 1, "include_engine_hours": false, "include_starter_voltage": false, "include_history_energy": false, "grid_nrofphases": "3", "include_motor_temp": false, "include_controller_temp": false, "include_coolant_temp": false, "include_motor_rpm": true, "include_motor_direction": true, "position": 0, "pvinverter_nrofphases": 1, "switch_1_type": 1, "switch_1_min": 0, "switch_1_max": "", "switch_1_initial": 0, "switch_1_label": "", "switch_1_unit": "", "switch_1_step": 1, "switch_1_customname": "", "switch_1_group": "", "switch_1_include_measurement": false, "switch_1_rgb_color_wheel": false, "switch_1_cct_wheel": false, "switch_1_rgb_white_dimmer": false, "fluid_type": 0, "include_tank_battery": false, "include_tank_temperature": false, "tank_battery_voltage": 3.3, "tank_capacity": 0.2, "temperature_type": 2, "include_humidity": false, "include_pressure": false, "include_temp_battery": false, "temp_battery_voltage": 3.3, "x": 860, "y": 260, "wires": [ [] ] }, { "id": "068edfdc98a2371a", "type": "debug", "z": "d416ea959b41ee48", "name": "debug 2", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "false", "statusVal": "", "statusType": "auto", "x": 860, "y": 420, "wires": [] }, { "id": "15a93f746a700cc5", "type": "mqtt-broker", "name": "", "broker": "", "port": "1883", "clientid": "SolarGrid", "autoConnect": true, "usetls": false, "protocolVersion": "5", "keepalive": "60", "cleansession": true, "autoUnsubscribe": true, "birthTopic": "Solargrid", "birthQos": "0", "birthPayload": "", "birthMsg": {}, "closeTopic": "", "closeQos": "0", "closePayload": "", "closeMsg": {}, "willTopic": "", "willQos": "0", "willPayload": "", "willMsg": {}, "userProps": "", "sessionExpiry": "5" }, { "id": "12b46aaf074e3aee", "type": "global-config", "env": [], "modules": { "@victronenergy/node-red-contrib-victron": "1.6.64" } } ]