Node-RED Soustraction

Bonsoir a tous,
Je suis de retour avec Node-RED, et je souhaite faire une soustraction de ma consommation elec avec ma prod photovoltaïque pour déterminer si je suis autonome ou pas. Mais je n’arrive pas faire de soustraction
image

[
    {
        "id": "18a93b4d6924c8da",
        "type": "group",
        "z": "8a3802703f8ab0c3",
        "style": {
            "stroke": "#999999",
            "stroke-opacity": "1",
            "fill": "none",
            "fill-opacity": "1",
            "label": true,
            "label-position": "nw",
            "color": "#a4a4a4"
        },
        "nodes": [
            "407188ad02e9d923",
            "fe26707ee830cd31"
        ],
        "x": 148,
        "y": 1433,
        "w": 878,
        "h": 254
    },
    {
        "id": "407188ad02e9d923",
        "type": "debug",
        "z": "8a3802703f8ab0c3",
        "g": "18a93b4d6924c8da",
        "name": "debug 53",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 910,
        "y": 1560,
        "wires": []
    },
    {
        "id": "fe26707ee830cd31",
        "type": "group",
        "z": "8a3802703f8ab0c3",
        "g": "18a93b4d6924c8da",
        "name": "Si conso > prod return false",
        "style": {
            "label": true,
            "color": "#000000"
        },
        "nodes": [
            "614542e89d4f9ed1",
            "6c1b7344778961b5",
            "3a3d939937d6dd6d",
            "3d65d6478c18a9de"
        ],
        "x": 174,
        "y": 1459,
        "w": 522,
        "h": 202
    },
    {
        "id": "614542e89d4f9ed1",
        "type": "join",
        "z": "8a3802703f8ab0c3",
        "g": "fe26707ee830cd31",
        "name": "",
        "mode": "custom",
        "build": "array",
        "property": "payload",
        "propertyType": "msg",
        "key": "topic",
        "joiner": "\\n",
        "joinerType": "str",
        "accumulate": false,
        "timeout": "",
        "count": "2",
        "reduceRight": false,
        "reduceExp": "",
        "reduceInit": "",
        "reduceInitType": "num",
        "reduceFixup": "",
        "x": 430,
        "y": 1560,
        "wires": [
            [
                "6c1b7344778961b5"
            ]
        ]
    },
    {
        "id": "6c1b7344778961b5",
        "type": "function",
        "z": "8a3802703f8ab0c3",
        "g": "fe26707ee830cd31",
        "name": "function 2",
        "func": "let energy = msg.payload; //lie le tableau donnée par le join\nif ((energy.Conso - energy.Prod) > 0) {\n    msg.payload = true;                     //[msg, true]\n    return [[], msg];\n} else if (0 == 0) {\n    msg.payload = false;                    //[false, msg]\n    return [msg, []];\n}",
        "outputs": 2,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 600,
        "y": 1560,
        "wires": [
            [
                "407188ad02e9d923"
            ],
            []
        ]
    },
    {
        "id": "3a3d939937d6dd6d",
        "type": "inject",
        "z": "8a3802703f8ab0c3",
        "g": "fe26707ee830cd31",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "Conso",
        "payload": "10",
        "payloadType": "num",
        "x": 280,
        "y": 1500,
        "wires": [
            [
                "614542e89d4f9ed1"
            ]
        ]
    },
    {
        "id": "3d65d6478c18a9de",
        "type": "inject",
        "z": "8a3802703f8ab0c3",
        "g": "fe26707ee830cd31",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "Prod",
        "payload": "8",
        "payloadType": "num",
        "x": 290,
        "y": 1620,
        "wires": [
            [
                "614542e89d4f9ed1"
            ]
        ]
    }
]

je n’arrive pas à faire un tableau avec mes 2 valeurs et je ne parviens pas à les exploiter dans la fonction

Salut,

Généralement ça ne se passe pas bien quand on essaye de récupérer 2 flux en entrée d’un noeud ou d’une fonction.
Ce serait plus simple de faire la lecture des valeurs dans deux nœuds successifs plutôt que parallèles.
Et aussi pour une simple soustraction pas besoin de faire une fonction, pu peux le faire dans un noeud de type change, ça suffit.

je vais tenter le change pour ne pas y perde si j’ose le dire…
Merci

@AlexHass , je n’ai pas suivi ton conseil. Je suis resté sur ma piste de départ
1 car j’étais prés du but
2 car je part de 0 et je ne sais pas faire ce genre de manipulation avec mais juste changer une valeur par une autre.

Bref, voila le résultat:

[
    {
        "id": "0f97282f8c153e77",
        "type": "group",
        "z": "8a3802703f8ab0c3",
        "name": "Ceci est fonctionnel",
        "style": {
            "label": true,
            "color": "#000000"
        },
        "nodes": [
            "d1902a428ebc9fe9",
            "8b8c16daea7a9242",
            "ee972a4e2f07a8f7"
        ],
        "x": 34,
        "y": 1039,
        "w": 1178,
        "h": 328
    },
    {
        "id": "d1902a428ebc9fe9",
        "type": "inject",
        "z": "8a3802703f8ab0c3",
        "g": "0f97282f8c153e77",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 140,
        "y": 1260,
        "wires": [
            [
                "e2b00661f985b8f1",
                "209d83784855c6eb"
            ]
        ]
    },
    {
        "id": "8b8c16daea7a9242",
        "type": "group",
        "z": "8a3802703f8ab0c3",
        "g": "0f97282f8c153e77",
        "name": "PV -> 0 injection vers routage ECS DEV...",
        "style": {
            "label": true,
            "color": "#000000"
        },
        "nodes": [
            "1db25accc72f4125",
            "cfc674fa62f84081",
            "c6045963c8d18cc0",
            "8872dcb5810976ea",
            "ef623f8d65a264dc",
            "209d83784855c6eb",
            "e2b00661f985b8f1",
            "2e027ca947305451",
            "473dc6b3a3c47021"
        ],
        "x": 374,
        "y": 1119,
        "w": 812,
        "h": 222
    },
    {
        "id": "1db25accc72f4125",
        "type": "join",
        "z": "8a3802703f8ab0c3",
        "g": "8b8c16daea7a9242",
        "name": "",
        "mode": "custom",
        "build": "object",
        "property": "payload",
        "propertyType": "msg",
        "key": "topic",
        "joiner": "\\n",
        "joinerType": "str",
        "accumulate": false,
        "timeout": "",
        "count": "2",
        "reduceRight": false,
        "reduceExp": "",
        "reduceInit": "",
        "reduceInitType": "num",
        "reduceFixup": "",
        "x": 690,
        "y": 1220,
        "wires": [
            [
                "cfc674fa62f84081",
                "ef623f8d65a264dc"
            ]
        ]
    },
    {
        "id": "cfc674fa62f84081",
        "type": "debug",
        "z": "8a3802703f8ab0c3",
        "g": "8b8c16daea7a9242",
        "name": "debug 70",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 870,
        "y": 1160,
        "wires": []
    },
    {
        "id": "c6045963c8d18cc0",
        "type": "debug",
        "z": "8a3802703f8ab0c3",
        "g": "8b8c16daea7a9242",
        "name": "Conso",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 630,
        "y": 1160,
        "wires": []
    },
    {
        "id": "8872dcb5810976ea",
        "type": "debug",
        "z": "8a3802703f8ab0c3",
        "g": "8b8c16daea7a9242",
        "name": "Prod",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 630,
        "y": 1300,
        "wires": []
    },
    {
        "id": "ef623f8d65a264dc",
        "type": "function",
        "z": "8a3802703f8ab0c3",
        "g": "8b8c16daea7a9242",
        "name": "function 13",
        "func": "let energy = msg.payload; //lie le tableau donnée par le join\nif ((energy.Conso - energy.Prod) < 0) {\n    msg.payload = true;\n    return [msg, []];           //[true, msg] noeud du haut\n} else if (0 == 0) {\n    msg.payload = false;\n    return [[], msg];           //[msg, false] noeud du bas\n}",
        "outputs": 2,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 870,
        "y": 1220,
        "wires": [
            [
                "2e027ca947305451"
            ],
            [
                "473dc6b3a3c47021"
            ]
        ]
    },
    {
        "id": "209d83784855c6eb",
        "type": "change",
        "z": "8a3802703f8ab0c3",
        "g": "8b8c16daea7a9242",
        "name": "Prod-Inst",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "20",
                "tot": "num"
            },
            {
                "t": "set",
                "p": "topic",
                "pt": "msg",
                "to": "Prod",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 460,
        "y": 1260,
        "wires": [
            [
                "8872dcb5810976ea",
                "1db25accc72f4125"
            ]
        ]
    },
    {
        "id": "e2b00661f985b8f1",
        "type": "change",
        "z": "8a3802703f8ab0c3",
        "g": "8b8c16daea7a9242",
        "name": "Conso-inst",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "10",
                "tot": "num"
            },
            {
                "t": "set",
                "p": "topic",
                "pt": "msg",
                "to": "Conso",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 470,
        "y": 1200,
        "wires": [
            [
                "c6045963c8d18cc0",
                "1db25accc72f4125"
            ]
        ]
    },
    {
        "id": "2e027ca947305451",
        "type": "debug",
        "z": "8a3802703f8ab0c3",
        "g": "8b8c16daea7a9242",
        "name": "autonome",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 1070,
        "y": 1160,
        "wires": []
    },
    {
        "id": "473dc6b3a3c47021",
        "type": "debug",
        "z": "8a3802703f8ab0c3",
        "g": "8b8c16daea7a9242",
        "name": "dependant",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 1070,
        "y": 1280,
        "wires": []
    },
    {
        "id": "ee972a4e2f07a8f7",
        "type": "comment",
        "z": "8a3802703f8ab0c3",
        "g": "0f97282f8c153e77",
        "name": "",
        "info": "Si Conso-inst est < que Prod-inst --> Envoie true sur la sortie du haut (Autonome)\nSi Conso-inst est > que Prod-inst --> Envoie true sur la sortie du bas  (Dependant)",
        "x": 1120,
        "y": 1080,
        "wires": []
    }
]

A la place de la fonction, un noeud change et du jsonata permet d’arriver au même résultat.

Le true/false sort sur le même output du noeud change. En fonction de la suite, c’est mieux/moins bien que la fonction avec deux sorties (ce qui n’est pas indispensable).

Bonjour, je ressors le sujet car je souhaite obtenir le même résultat, c’est-à-dire soustraire ma consommation de ma production solaire afin d’obtenir un résultat exploitable sous forme d’entités à ajouter ultérieurement à un flux.

[{"id":"372cfde1af10bf6d","type":"inject","z":"cb6c4346ed3b5566","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":500,"y":300,"wires":[["e202f9c148e8c087","b7c9f46cb11e3f8e"]]},{"id":"e202f9c148e8c087","type":"api-current-state","z":"cb6c4346ed3b5566","name":"Prod solaire","server":"795cbd51.9e8064","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.shelly_shem_485519c9c2da_2_current_consumption","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entity"},{"property":"entity_id","propertyType":"msg","value":"","valueType":"entity"},{"property":"last_changed","propertyType":"msg","value":"","valueType":"str"},{"property":"last_updated","propertyType":"msg","value":"","valueType":"str"}],"for":0,"forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"entity_id","override_data":"msg","x":730,"y":300,"wires":[["38af62b84188a6e5"]]},{"id":"38af62b84188a6e5","type":"function","z":"cb6c4346ed3b5566","name":"Stockage production","func":"flow.set(\"production\", msg.payload);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1040,"y":300,"wires":[["f261c8a1a7c29e58"]]},{"id":"ecb7f327848b282a","type":"debug","z":"cb6c4346ed3b5566","name":"Reste","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1590,"y":260,"wires":[]},{"id":"b7c9f46cb11e3f8e","type":"api-current-state","z":"cb6c4346ed3b5566","name":"Consommation électrique","server":"795cbd51.9e8064","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.shelly_shem_485519c9c2da_1_current_consumption","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"0","valueType":"num"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":750,"y":220,"wires":[["7218abc9debe0f7d"]]},{"id":"7218abc9debe0f7d","type":"function","z":"cb6c4346ed3b5566","name":"Stockage production","func":"flow.set(\"production\", msg.payload);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1020,"y":220,"wires":[["f261c8a1a7c29e58"]]},{"id":"f261c8a1a7c29e58","type":"change","z":"cb6c4346ed3b5566","name":"Conso- prod","rules":[{"t":"set","p":"payload","pt":"msg","to":"(Conso-Prod>0) ? true : false","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":1330,"y":260,"wires":[["ecb7f327848b282a"]]},{"id":"795cbd51.9e8064","type":"server","name":"Home Assistant","version":5,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":"30","areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m","enableGlobalContextStore":true}]

Voici ma version en suivant tes conseils, mais j’ai dû oublier quelque chose, car cela ne fonctionne pas… :thinking: Pourrais-tu m’aider, s’il te plaît, à identifier le problème ?

Erreur « classique » :slight_smile:
Avec le principe de NodeRed et ce que tu as fait, tu ne peux pas avoir le noeud conso et le noeud prod qui font ce qu’il faut et ensuite « simplement » récupérer les deux.
Par conception de NodeRed, tout est asynchrone. Comme tu veux être sûr de passer à l’étape calcul quand les deux résultats sont là (imagine qu’une des requêtes mette 1 seconde et l’autre 5 seconde - comment « attendre » ?), il faut utiliser le noeud join. Le principe est un peu tordu (je trouve).
Mais avec les exemples fournis par NodeRed, ça le fait bien.
Voici le flow qui devrait marcher:

[{"id":"372cfde1af10bf6d","type":"inject","z":"671609705841dfab","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":200,"y":1040,"wires":[["d65a77250c2dcf89","1c97cfa9a2d49adb"]]},{"id":"ecb7f327848b282a","type":"debug","z":"671609705841dfab","name":"Reste","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1070,"y":1040,"wires":[]},{"id":"f261c8a1a7c29e58","type":"change","z":"671609705841dfab","name":"Conso- prod","rules":[{"t":"set","p":"payload","pt":"msg","to":"( payload.shelly_shem_485519c9c2da_1_current_consumption - payload.shelly_shem_485519c9c2da_2_current_consumption > 0 ) ? true : false","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":870,"y":1040,"wires":[["ecb7f327848b282a"]]},{"id":"cd0b2bc6cc6fbbcc","type":"join","z":"671609705841dfab","name":"","mode":"custom","build":"object","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":false,"timeout":"1","count":"2","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":650,"y":1040,"wires":[["f261c8a1a7c29e58"]]},{"id":"d65a77250c2dcf89","type":"api-current-state","z":"671609705841dfab","name":"Conso","server":"4ea89bf17c4b2c16","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.shelly_shem_485519c9c2da_1_current_consumption","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":390,"y":1000,"wires":[["cd0b2bc6cc6fbbcc"]]},{"id":"1c97cfa9a2d49adb","type":"api-current-state","z":"671609705841dfab","name":"Prod","server":"4ea89bf17c4b2c16","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.shelly_shem_485519c9c2da_2_current_consumption","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":390,"y":1080,"wires":[["cd0b2bc6cc6fbbcc"]]},{"id":"4ea89bf17c4b2c16","type":"server","name":"Home Assistant","version":5,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":"30","areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m","enableGlobalContextStore":true}]

Bonjour, merci pour l’explication. Effectivement, je n’avais pas pensé que Node-RED ne calculait pas comme je le pensais. J’ai copié ton code, mais mon résultat est faux. J’aimerais obtenir le résultat même s’il est négatif. Merci, ça avance. :smiling_face:

[{"id":"a943f86b52996e0b","type":"inject","z":"cb6c4346ed3b5566","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":940,"y":1020,"wires":[["0c55d49292044d64","6802b01080f87325"]]},{"id":"fc800d59584fcb94","type":"debug","z":"cb6c4346ed3b5566","name":"Reste1","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1820,"y":1020,"wires":[]},{"id":"8b79ba5dc85c2fd3","type":"change","z":"cb6c4346ed3b5566","name":"Conso- prod","rules":[{"t":"set","p":"payload","pt":"msg","to":"( payload.shelly_shem_485519c9c2da_1_current_consumption - payload.shelly_shem_485519c9c2da_2_current_consumption  > 0 ) ? true : false","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":1610,"y":1020,"wires":[["fc800d59584fcb94"]]},{"id":"478cae0cccaa69ae","type":"join","z":"cb6c4346ed3b5566","name":"","mode":"custom","build":"object","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":false,"timeout":"1","count":"2","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":1390,"y":1020,"wires":[["8b79ba5dc85c2fd3"]]},{"id":"0c55d49292044d64","type":"api-current-state","z":"cb6c4346ed3b5566","name":"Conso","server":"a7515b50e9498ec2","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.shelly_shem_485519c9c2da_1_current_consumption","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":1130,"y":980,"wires":[["478cae0cccaa69ae"]]},{"id":"6802b01080f87325","type":"api-current-state","z":"cb6c4346ed3b5566","name":"Prod","server":"a7515b50e9498ec2","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.shelly_shem_485519c9c2da_2_current_consumption","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":1130,"y":1060,"wires":[["478cae0cccaa69ae"]]},{"id":"a7515b50e9498ec2","type":"server","name":"Home Assistant","version":5,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":"30","areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m","enableGlobalContextStore":true}]

Par rapport à quoi? L’exemple donne vrai ou faux en fonction du test. SI c’est seulement la différence, il faut corriger la formule jsonata (en gros virer la partie true/false de l’exemple)

Je souhaite obtenir le résultat de ma production moins ma consommation afin de passer à une autre étape, et non seulement de savoir si c’est vrai ou faux. J’ai essayé de supprimer la partie true/false, mais cela ne fonctionne pas, je ne vois pas où est mon erreur :thinking:

Il y a ça :

( payload.shelly_shem_485519c9c2da_1_current_consumption - payload.shelly_shem_485519c9c2da_2_current_consumption  > 0 ) ? true : false

Il faut ça :

payload.shelly_shem_485519c9c2da_1_current_consumption - payload.shelly_shem_485519c9c2da_2_current_consumption 

Virer true/false…

1 « J'aime »

C’est gentil de te pencher sur mon problème. Comme mentionné précédemment, je l’avais déjà essayé et maintenant j’ai réessayé, mais cela me donne un message d’erreur: 03/07/2023 22:01:25 msg.payload : undefined

J’ai tout vérifié et j’ai dû commettre une erreur de syntaxe. Ça fonctionne enfin ! Merci beaucoup pour votre aide. :star_struck:

Voici mon flux pour obtenir le résultat de ce qu’il me reste en énergie solaire (Production solaire - Consommation). J’ai ajouté une moyenne sur 5 minutes, ce qui facilite la gestion des allumages et extinctions de mes appareils.

[{"id":"cb138e701052dd48","type":"api-current-state","z":"cb6c4346ed3b5566","name":"Conso","server":"a7515b50e9498ec2","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.shelly_shem_485519c9c2da_1_current_consumption","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"topic","propertyType":"msg","value":"conso","valueType":"str"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":590,"y":600,"wires":[["9b0c1c0fa02def0f"]]},{"id":"09419209f283a1f7","type":"api-current-state","z":"cb6c4346ed3b5566","name":"Prod","server":"a7515b50e9498ec2","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.shelly_shem_485519c9c2da_2_current_consumption","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"topic","propertyType":"msg","value":"prod","valueType":"str"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":590,"y":680,"wires":[["2ee8906b6ebbf74e"]]},{"id":"bd7b46ffada9ad9b","type":"join","z":"cb6c4346ed3b5566","name":"","mode":"custom","build":"object","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":false,"timeout":"1","count":"2","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":910,"y":600,"wires":[["56184aa8e6dabca6"]]},{"id":"bfd1cc5b315a5d8c","type":"cronplus","z":"cb6c4346ed3b5566","name":"Toutes les 15sec","outputField":"payload","timeZone":"","persistDynamic":false,"commandResponseMsgOutput":"output1","outputs":1,"options":[{"name":"schedule1","topic":"topic1","payloadType":"default","payload":"","expressionType":"cron","expression":"*/15 * * * * *","location":"","offset":"0","solarType":"all","solarEvents":"sunrise,sunset"}],"x":310,"y":680,"wires":[["cb138e701052dd48","09419209f283a1f7"]]},{"id":"56184aa8e6dabca6","type":"change","z":"cb6c4346ed3b5566","name":"Prod - Conso ","rules":[{"t":"set","p":"payload","pt":"msg","to":"$max([payload.prod, 0]) - $max([payload.conso, 0])","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":1150,"y":600,"wires":[["4d55df61e3d440d4","1ee2786ec61c8c36"]]},{"id":"6614c6f7750c189f","type":"debug","z":"cb6c4346ed3b5566","name":"Reste en +","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1650,"y":600,"wires":[]},{"id":"2ee8906b6ebbf74e","type":"switch","z":"cb6c4346ed3b5566","name":">=0","property":"payload","propertyType":"msg","rules":[{"t":"gte","v":"0","vt":"num"}],"checkall":"true","repair":false,"outputs":1,"x":750,"y":680,"wires":[["bd7b46ffada9ad9b"]]},{"id":"4d55df61e3d440d4","type":"smooth","z":"cb6c4346ed3b5566","name":"Moyenne sur 5 min ","property":"payload","action":"mean","count":"20","round":"","mult":"single","reduce":false,"x":1430,"y":600,"wires":[["6614c6f7750c189f"]]},{"id":"1ee2786ec61c8c36","type":"debug","z":"cb6c4346ed3b5566","name":"Reste en +","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1410,"y":680,"wires":[]},{"id":"9b0c1c0fa02def0f","type":"switch","z":"cb6c4346ed3b5566","name":">=0","property":"payload","propertyType":"msg","rules":[{"t":"gte","v":"0","vt":"num"}],"checkall":"true","repair":false,"outputs":1,"x":750,"y":600,"wires":[["bd7b46ffada9ad9b"]]},{"id":"a7515b50e9498ec2","type":"server","name":"Home Assistant","version":5,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":"30","areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m","enableGlobalContextStore":true}]