Bassols especial grinch
Control del monedero solar, gastos y compensaciones para la tarifa gestionada por Seneo y articulada con bassols, conseguida por el grinchEnergético.
https://www.youtube.com/watch?v=PM_6GXnvZ30&feature=youtu.be
[{"id":"445dac2cf9e0dbce","type":"tab","label":"Balssols","disabled":false,"info":"PRECIOS\n| Termino de potencia (€/KW y año) | P1 | P2 |\n| Peaje de Potencia |22,958932 |0,442165 |\n| Cargo de Potencia |3,971618 |0,255423 |\n| Total término de potencia |26,930550 |0,697588 | \n\n| Termino de energia (€/KW y año) | P1 | P2 | P3 |\n| Peaje energía |0,034234 |0,016540 |0,000079 |\n| Cargo energía |0,058305 |0,011661 |0,002915 |\n| Coste energía |0,124510 |0,118858 |0,117060 |\n| Total término de energía |0,217049 |0,147059 |0,120054 |\n\n\n","env":[]},{"id":"b8dac7b4e3c30b37","type":"link in","z":"445dac2cf9e0dbce","name":"Cálculo contrato bassols","links":["f718e1e355fdf629"],"x":155,"y":480,"wires":[["6bc1f62a947062e2"]]},{"id":"b4c14cc4bab05971","type":"function","z":"445dac2cf9e0dbce","name":"Inserción de tablas de precios","func":"let balanceNeto=msg.payload.balanceNeto;\nlet datos = {\n potencia: [\n [0, { peaje: 0.0000504755, cargo: 0.0000291579, coste: 0.0, total: 0.0000796333 }],\n [1, { peaje: 0.0000504755, cargo: 0.0000291579, coste: 0.0, total: 0.0000796333 }],\n [2, { peaje: 0.0000504755, cargo: 0.0000291579, coste: 0.0, total: 0.0000796333 }],\n [3, { peaje: 0.0000504755, cargo: 0.0000291579, coste: 0.0, total: 0.0000796333 }],\n [4, { peaje: 0.0000504755, cargo: 0.0000291579, coste: 0.0, total: 0.0000796333 }],\n [5, { peaje: 0.0000504755, cargo: 0.0000291579, coste: 0.0, total: 0.0000796333 }],\n [6, { peaje: 0.0000504755, cargo: 0.0000291579, coste: 0.0, total: 0.0000796333 }],\n [7, { peaje: 0.0000504755, cargo: 0.0000291579, coste: 0.0, total: 0.0000796333 }],\n [8, { peaje: 0.0026208827, cargo: 0.0004533811, coste: 0.0, total: 0.0030742637 }],\n [9, { peaje: 0.0026208827, cargo: 0.0004533811, coste: 0.0, total: 0.0030742637 }],\n [10, { peaje: 0.0026208827, cargo: 0.0004533811, coste: 0.0, total: 0.0030742637 }],\n [11, { peaje: 0.0026208827, cargo: 0.0004533811, coste: 0.0, total: 0.0030742637 }],\n [12, { peaje: 0.0026208827, cargo: 0.0004533811, coste: 0.0, total: 0.0030742637 }],\n [13, { peaje: 0.0026208827, cargo: 0.0004533811, coste: 0.0, total: 0.0030742637 }],\n [14, { peaje: 0.0026208827, cargo: 0.0004533811, coste: 0.0, total: 0.0030742637 }],\n [15, { peaje: 0.0026208827, cargo: 0.0004533811, coste: 0.0, total: 0.0030742637 }],\n [16, { peaje: 0.0026208827, cargo: 0.0004533811, coste: 0.0, total: 0.0030742637 }],\n [17, { peaje: 0.0026208827, cargo: 0.0004533811, coste: 0.0, total: 0.0030742637 }],\n [18, { peaje: 0.0026208827, cargo: 0.0004533811, coste: 0.0, total: 0.0030742637 }],\n [19, { peaje: 0.0026208827, cargo: 0.0004533811, coste: 0.0, total: 0.0030742637 }],\n [20, { peaje: 0.0026208827, cargo: 0.0004533811, coste: 0.0, total: 0.0030742637 }],\n [21, { peaje: 0.0026208827, cargo: 0.0004533811, coste: 0.0, total: 0.0030742637 }],\n [22, { peaje: 0.0026208827, cargo: 0.0004533811, coste: 0.0, total: 0.0030742637 }],\n [23, { peaje: 0.0026208827, cargo: 0.0004533811, coste: 0.0, total: 0.0030742637 }],\n ],\n energia: [\n [0,{ peaje: 0.000079, cargo: 0.002915, coste: 0.117060, total: 0.120054,periodo:[\"P3\",\"valle\"]}],\n [1,{ peaje: 0.000079, cargo: 0.002915, coste: 0.117060, total: 0.120054, periodo: [\"P3\", \"valle\"] }],\n [2,{ peaje: 0.000079, cargo: 0.002915, coste: 0.117060, total: 0.120054, periodo: [\"P3\", \"valle\"] }],\n [3,{ peaje: 0.000079, cargo: 0.002915, coste: 0.117060, total: 0.120054, periodo: [\"P3\", \"valle\"] }],\n [4,{ peaje: 0.000079, cargo: 0.002915, coste: 0.117060, total: 0.120054, periodo: [\"P3\", \"valle\"] }],\n [5,{ peaje: 0.000079, cargo: 0.002915, coste: 0.117060, total: 0.120054, periodo: [\"P3\", \"valle\"] }], \n [6,{ peaje: 0.000079, cargo: 0.002915, coste: 0.117060, total: 0.120054, periodo: [\"P3\", \"valle\"] }],\n [7,{ peaje: 0.000079, cargo: 0.002915, coste: 0.117060, total: 0.120054, periodo: [\"P3\", \"valle\"] }],\n [8,{ peaje: 0.016540, cargo: 0.011661, coste: 0.118858, total: 0.147059, periodo: [\"P2\", \"llano\"] }],\n [9,{ peaje: 0.016540, cargo: 0.011661, coste: 0.118858, total: 0.147059, periodo: [\"P2\", \"llano\"] }],\n [10,{ peaje: 0.034234, cargo: 0.058305, coste: 0.124510, total: 0.217049, periodo: [\"P1\", \"punta\"] }],\n [11,{ peaje: 0.034234, cargo: 0.058305, coste: 0.124510, total: 0.217049, periodo: [\"P1\", \"punta\"] }],\n [12,{ peaje: 0.034234, cargo: 0.058305, coste: 0.124510, total: 0.217049, periodo: [\"P1\", \"punta\"] }],\n [13,{ peaje: 0.034234, cargo: 0.058305, coste: 0.124510, total: 0.217049, periodo: [\"P1\", \"punta\"] }],\n [14,{ peaje: 0.016540, cargo: 0.011661, coste: 0.118858, total: 0.147059, periodo: [\"P2\", \"llano\"] }],\n [15,{ peaje: 0.016540, cargo: 0.011661, coste: 0.118858, total: 0.147059, periodo: [\"P2\", \"llano\"] }],\n [16,{ peaje: 0.016540, cargo: 0.011661, coste: 0.118858, total: 0.147059, periodo: [\"P2\", \"llano\"] }],\n [17,{ peaje: 0.016540, cargo: 0.011661, coste: 0.118858, total: 0.147059, periodo: [\"P2\", \"llano\"] }],\n [18,{ peaje: 0.034234, cargo: 0.058305, coste: 0.124510, total: 0.217049, periodo: [\"P1\", \"punta\"] }],\n [19,{ peaje: 0.034234, cargo: 0.058305, coste: 0.124510, total: 0.217049, periodo: [\"P1\", \"punta\"] }],\n [20,{ peaje: 0.034234, cargo: 0.058305, coste: 0.124510, total: 0.217049, periodo: [\"P1\", \"punta\"] }],\n [21,{ peaje: 0.034234, cargo: 0.058305, coste: 0.124510, total: 0.217049, periodo: [\"P1\", \"punta\"] }],\n [22,{ peaje: 0.016540, cargo: 0.011661, coste: 0.118858, total: 0.147059, periodo: [\"P2\", \"llano\"] }], \n [23,{ peaje: 0.016540, cargo: 0.011661, coste: 0.118858, total: 0.147059, periodo: [\"P2\", \"llano\"] }]\n ],\n compensacion:[\n [0, { peaje: 0, cargo: 0, coste: -0.09, total: -0.09, periodo: [\"P3\", \"valle\"] }],\n [1, { peaje: 0, cargo: 0, coste: -0.09, total: -0.09, periodo: [\"P3\", \"valle\"] }],\n [2, { peaje: 0, cargo: 0, coste: -0.09, total: -0.09, periodo: [\"P3\", \"valle\"] }],\n [3, { peaje: 0, cargo: 0, coste: -0.09, total: -0.09, periodo: [\"P3\", \"valle\"] }],\n [4, { peaje: 0, cargo: 0, coste: -0.09, total: -0.09, periodo: [\"P3\", \"valle\"] }],\n [5, { peaje: 0, cargo: 0, coste: -0.09, total: -0.09, periodo: [\"P3\", \"valle\"] }],\n [6, { peaje: 0, cargo: 0, coste: -0.09, total: -0.09, periodo: [\"P3\", \"valle\"] }],\n [7, { peaje: 0, cargo: 0, coste: -0.09, total: -0.09, periodo: [\"P3\", \"valle\"] }],\n [8, { peaje: 0, cargo: 0, coste: -0.09, total: -0.09, periodo: [\"P2\", \"llano\"] }],\n [9, { peaje: 0, cargo: 0, coste: -0.09, total: -0.09, periodo: [\"P2\", \"llano\"] }],\n [10, { peaje: 0, cargo: 0, coste: -0.09, total: -0.09, periodo: [\"P1\", \"punta\"] }],\n [11, { peaje: 0, cargo: 0, coste: -0.09, total: -0.09, periodo: [\"P1\", \"punta\"] }],\n [12, { peaje: 0, cargo: 0, coste: -0.09, total: -0.09, periodo: [\"P1\", \"punta\"] }],\n [13, { peaje: 0, cargo: 0, coste: -0.09, total: -0.09, periodo: [\"P1\", \"punta\"] }],\n [14, { peaje: 0, cargo: 0, coste: -0.09, total: -0.09, periodo: [\"P1\", \"punta\"] }],\n [15, { peaje: 0, cargo: 0, coste: -0.09, total: -0.09, periodo: [\"P2\", \"llano\"] }],\n [16, { peaje: 0, cargo: 0, coste: -0.09, total: -0.09, periodo: [\"P2\", \"llano\"] }],\n [17, { peaje: 0, cargo: 0, coste: -0.09, total: -0.09, periodo: [\"P2\", \"llano\"] }],\n [18, { peaje: 0, cargo: 0, coste: -0.09, total: -0.09, periodo: [\"P1\", \"punta\"] }],\n [19, { peaje: 0, cargo: 0, coste: -0.09, total: -0.09, periodo: [\"P1\", \"punta\"] }],\n [20, { peaje: 0, cargo: 0, coste: -0.09, total: -0.09, periodo: [\"P1\", \"punta\"] }],\n [21, { peaje: 0, cargo: 0, coste: -0.09, total: -0.09, periodo: [\"P1\", \"punta\"] }],\n [22, { peaje: 0, cargo: 0, coste: -0.09, total: -0.09, periodo: [\"P2\", \"llano\"] }],\n [23, { peaje: 0, cargo: 0, coste: -0.09, total: -0.09, periodo: [\"P2\", \"llano\"] }]\n ] \n\n };\n msg.contrato=datos;\n msg.balanceNeto=balanceNeto;\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":650,"y":480,"wires":[["c79bc434b900c3d7","f912c8cd8b5c0ccf","758d09c754dbda0f","aab47985461670a1"]]},{"id":"6bc1f62a947062e2","type":"function","z":"445dac2cf9e0dbce","name":"Comprueba consolidable","func":"if(msg.payload.balanceNeto.isConsolidable===true){\n return msg;\n}","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":390,"y":480,"wires":[["b4c14cc4bab05971"]]},{"id":"dc2110a7123ac813","type":"inject","z":"445dac2cf9e0dbce","name":"test_balanceNeto negativo","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"{\"balanceNeto\":{\"duration\":\"PT1H\",\"durationChronoUnit\":{\"_name\":\"Minutes\",\"_duration\":\"PT1M\"},\"feeded\":-1,\"consumed\":807.1022222222223,\"produced\":4521.3475,\"startAt\":\"2025-03-04T23:00\",\"endAt\":\"2025-03-05T00:00\",\"isConsolidable\":true,\"batterySlots\":[{\"readTimeStamp\":\"2025-02-27T15:08:47\",\"length\":300000,\"producedInWatsH\":4798,\"feededInWatsH\":4388,\"consumedInWatsH\":410},{\"readTimeStamp\":\"2025-02-27T15:13:47\",\"length\":300000,\"producedInWatsH\":4995,\"feededInWatsH\":4594,\"consumedInWatsH\":401},{\"readTimeStamp\":\"2025-02-27T15:18:47\",\"length\":300000,\"producedInWatsH\":4821,\"feededInWatsH\":4001,\"consumedInWatsH\":820},{\"readTimeStamp\":\"2025-02-27T15:23:47\",\"length\":300000,\"producedInWatsH\":4687,\"feededInWatsH\":3887,\"consumedInWatsH\":800},{\"readTimeStamp\":\"2025-02-27T15:28:47\",\"length\":300000,\"producedInWatsH\":4606,\"feededInWatsH\":3718,\"consumedInWatsH\":888},{\"readTimeStamp\":\"2025-02-27T15:33:47\",\"length\":300000,\"producedInWatsH\":4524,\"feededInWatsH\":3283,\"consumedInWatsH\":1241},{\"readTimeStamp\":\"2025-02-27T15:38:47\",\"length\":300000,\"producedInWatsH\":4587,\"feededInWatsH\":3127,\"consumedInWatsH\":1460},{\"readTimeStamp\":\"2025-02-27T15:43:47\",\"length\":300000,\"producedInWatsH\":4461,\"feededInWatsH\":3006,\"consumedInWatsH\":1455},{\"readTimeStamp\":\"2025-02-27T15:48:47\",\"length\":300000,\"producedInWatsH\":4293,\"feededInWatsH\":3660,\"consumedInWatsH\":633},{\"readTimeStamp\":\"2025-02-27T15:53:47\",\"length\":301000,\"producedInWatsH\":4231,\"feededInWatsH\":3661,\"consumedInWatsH\":570},{\"readTimeStamp\":\"2025-02-27T15:58:48\",\"length\":300000,\"producedInWatsH\":4152,\"feededInWatsH\":3649,\"consumedInWatsH\":503},{\"readTimeStamp\":\"2025-02-27T16:03:48\",\"length\":302000,\"producedInWatsH\":4060,\"feededInWatsH\":3561,\"consumedInWatsH\":499}],\"length\":12,\"startTime\":\"2025-02-27T15:00\",\"endTime\":\"2025-02-27T16:00\",\"imported\":0,\"exported\":3714.245277777778,\"sub_bucket_imported_from_grid\":0,\"sub_bucket_exported_to_grid\":3415.5169444444446}}","payloadType":"json","x":150,"y":380,"wires":[["6bc1f62a947062e2"]]},{"id":"b6609e5bbfbfb5cd","type":"inject","z":"445dac2cf9e0dbce","name":"test_balanceNeto positivo","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"{\"balanceNeto\":{\"duration\":\"PT1H\",\"durationChronoUnit\":{\"_name\":\"Minutes\",\"_duration\":\"PT1M\"},\"feeded\":1,\"consumed\":807.1022222222223,\"produced\":4521.3475,\"startAt\":\"2025-03-04T23:00\",\"endAt\":\"2025-03-05T00:00\",\"isConsolidable\":true,\"batterySlots\":[{\"readTimeStamp\":\"2025-02-27T15:08:47\",\"length\":300000,\"producedInWatsH\":4798,\"feededInWatsH\":4388,\"consumedInWatsH\":410},{\"readTimeStamp\":\"2025-02-27T15:13:47\",\"length\":300000,\"producedInWatsH\":4995,\"feededInWatsH\":4594,\"consumedInWatsH\":401},{\"readTimeStamp\":\"2025-02-27T15:18:47\",\"length\":300000,\"producedInWatsH\":4821,\"feededInWatsH\":4001,\"consumedInWatsH\":820},{\"readTimeStamp\":\"2025-02-27T15:23:47\",\"length\":300000,\"producedInWatsH\":4687,\"feededInWatsH\":3887,\"consumedInWatsH\":800},{\"readTimeStamp\":\"2025-02-27T15:28:47\",\"length\":300000,\"producedInWatsH\":4606,\"feededInWatsH\":3718,\"consumedInWatsH\":888},{\"readTimeStamp\":\"2025-02-27T15:33:47\",\"length\":300000,\"producedInWatsH\":4524,\"feededInWatsH\":3283,\"consumedInWatsH\":1241},{\"readTimeStamp\":\"2025-02-27T15:38:47\",\"length\":300000,\"producedInWatsH\":4587,\"feededInWatsH\":3127,\"consumedInWatsH\":1460},{\"readTimeStamp\":\"2025-02-27T15:43:47\",\"length\":300000,\"producedInWatsH\":4461,\"feededInWatsH\":3006,\"consumedInWatsH\":1455},{\"readTimeStamp\":\"2025-02-27T15:48:47\",\"length\":300000,\"producedInWatsH\":4293,\"feededInWatsH\":3660,\"consumedInWatsH\":633},{\"readTimeStamp\":\"2025-02-27T15:53:47\",\"length\":301000,\"producedInWatsH\":4231,\"feededInWatsH\":3661,\"consumedInWatsH\":570},{\"readTimeStamp\":\"2025-02-27T15:58:48\",\"length\":300000,\"producedInWatsH\":4152,\"feededInWatsH\":3649,\"consumedInWatsH\":503},{\"readTimeStamp\":\"2025-02-27T16:03:48\",\"length\":302000,\"producedInWatsH\":4060,\"feededInWatsH\":3561,\"consumedInWatsH\":499}],\"length\":12,\"startTime\":\"2025-02-27T15:00\",\"endTime\":\"2025-02-27T16:00\",\"imported\":0,\"exported\":3714.245277777778,\"sub_bucket_imported_from_grid\":0,\"sub_bucket_exported_to_grid\":3415.5169444444446}}","payloadType":"json","x":150,"y":340,"wires":[["6bc1f62a947062e2"]]},{"id":"f4d8b57974bbdc82","type":"inject","z":"445dac2cf9e0dbce","name":"reset","props":[{"p":"payload"},{"p":"reset","v":"true","vt":"bool"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":990,"y":240,"wires":[["758d09c754dbda0f"]]},{"id":"c79bc434b900c3d7","type":"function","z":"445dac2cf9e0dbce","name":"Precio de Compra de la siguiente hora.","func":"let balanceNeto = msg.balanceNeto;\nlet contrato= msg.contrato;\nlet slotHour=-1;\nlet slotPrice=0;\nlet periodoName=\"vacio\";\nlet periodoDesc=\"vacio\";\nif(msg.reset){\n msg.payload={\n dbg_slotHour:0,\n vbat_precioProximaHora:0,\n vbat_periodoProximaHoraName:\"periodoName\",\n vbat_periodoProximaHoraDesc:\"periodoDesc\"\n };\n node.status({ fill: \"orange\", shape: \"dot\", text: \"Working fine. Reset applied\" });\n return msg;\n}\n\nif(balanceNeto){\n if (contrato) {\n let dateSlot=new Date(msg.balanceNeto.endAt);\n let slotDay=new Date(msg.balanceNeto.startAt).getDay();\n \n if(slotDay>0 && slotDay<6){\n slotHour = dateSlot.getHours();\n }else{\n slotHour=0;\n }\n \n slotPrice=((contrato.energia[slotHour][1].total));\n periodoName=contrato.energia[slotHour][1].periodo[0];\n periodoDesc=contrato.energia[slotHour][1].periodo[1];\n msg.payload={\n dbg_slotHour:slotHour,\n vbat_precioProximaHora:slotPrice,\n vbat_periodoProximaHoraName:periodoName,\n vbat_periodoProximaHoraDesc:periodoDesc\n };\n return msg;\n }else{\n throw new Error(\"No vienen datos del balanceNeto\");\n }\n}\n\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1090,"y":780,"wires":[["eccb55d24539d1ed"]]},{"id":"eccb55d24539d1ed","type":"ha-mqtt-sensor","z":"445dac2cf9e0dbce","server":"8896a1b8d5985b9c","device":"0fc34afa72aa1f4d","name":"vbat_bassols_precioAhora","unit_of_measurement":"","config":"{\"availability\":[{\"topic\":\"zigbee2mqtt/bridge/state\",\"value_template\":\"{{ value_json.state }}\"}],\"value_template\":\"{{ value_json.vbat_precioProximaHora }}\",\"unit_of_measurement\":\"€\",\"suggested_display_precision\":3,\"device_class\":\"monetary\",\"icon\":\"mdi:transmission-tower-export\"}","x":1660,"y":780,"wires":[]},{"id":"f912c8cd8b5c0ccf","type":"function","z":"445dac2cf9e0dbce","name":"Calculo del coste acumulado del temino de potencia,\\n desglosando costes y peajes","func":"let balanceNeto=msg.balanceNeto;\nlet costeAcumuladoDelTerminoDePotencia=context.get(\"costeAcumuladoDelTerminoDePotencia\") || 0;\nlet costeAcumuladoDelPeajeDePotencia=context.get(\"costeAcumuladoDelPeajeDePotencia\") || 0;\nlet costeAcumuladoDelCargoDePotencia=context.get(\"costeAcumuladoDelCargoDePotencia\") || 0;\nlet costeAcumuladoDelIvaAplicable=context.get(\"costeAcumuladoDelIvaAplicable\")||0;\nlet costeAcumuladoDelIEAplicable=context.get(\"costeAcumuladoDelIEAplicable\")||0;\nlet potenciaP1=4.6;\nlet potenciaP2=4.6;\nlet iva=0.21;\nlet ie=0.0511; // IMPUESTO ELECTRICO 2025\nlet potenciaAplicable=0;\nlet isValle=false;\n\n\nlet contrato= msg.contrato;\nlet slotHour=-1;\nlet slotDay=-1;\nlet slotPrice=0;\nlet periodoName=\"vacio\";\nlet periodoDesc=\"vacio\";\n\nif(msg.reset){\n costeAcumuladoDelTerminoDePotencia=0.0;\n msg.payload={\n vbat_costeAcumuladoDelTerminoDePotencia:0,\n vbat_costeAcumuladoDelCargoDePotencia:0,\n vbat_costeAcumuladoDelPeajeDePotencia:0,\n vbat_costeAcumuladoDelIvaAplicable:0,\n vbat_costeAcumuladoDelIEAplicable:0,\n vbat_periodoName:\"periodoName\",\n vbat_PeridodDesc:\"periodoName\"\n };\n context.set(\"costeAcumuladoDelTerminoDePotencia\",0);\n context.set(\"costeAcumuladoDelCargoDePotencia\", 0);\n context.set(\"costeAcumuladoDelPeajeDePotencia\", 0);\n context.set(\"costeAcumuladoDelIvaAplicable\", 0);\n context.set(\"costeAcumuladoDelIEAplicable\", 0);\n \n node.status({ fill: \"orange\", shape: \"dot\", text: \"Working fine. Reset applied\" });\n return msg;\n \n}\n\nif(balanceNeto){\n if (contrato) {\n // slotHour = new Date(msg.balanceNeto.startAt).getHours();\n slotDay=new Date(msg.balanceNeto.startAt).getDay();\n\n if(slotDay>0 && slotDay<6){\n potenciaAplicable=potenciaP1;\n isValle=false;\n slotHour=8;\n }else{\n potenciaAplicable=potenciaP2;\n isValle=true;\n slotHour=0;\n }\n \n costeAcumuladoDelTerminoDePotencia+=(contrato.potencia[slotHour][1].total*potenciaAplicable);\n costeAcumuladoDelPeajeDePotencia+=(contrato.potencia[slotHour][1].peaje*potenciaAplicable);\n costeAcumuladoDelCargoDePotencia+=(contrato.potencia[slotHour][1].cargo * potenciaAplicable);\n costeAcumuladoDelIvaAplicable+=(contrato.potencia[slotHour][1].total*potenciaAplicable)*iva;\n costeAcumuladoDelIEAplicable+=(contrato.potencia[slotHour][1].total*potenciaAplicable)*ie;\n\n periodoName=contrato.energia[slotHour][1].periodo[0];\n periodoDesc=contrato.energia[slotHour][1].periodo[1];\n msg.payload={\n vbat_costeAcumuladoDelTerminoDePotencia:costeAcumuladoDelTerminoDePotencia,\n vbat_costeAcumuladoDelCargoDePotencia:costeAcumuladoDelCargoDePotencia,\n vbat_costeAcumuladoDelPeajeDePotencia:costeAcumuladoDelPeajeDePotencia,\n vbat_costeAcumuladoDelIvaAplicable:costeAcumuladoDelIvaAplicable,\n vbat_costeAcumuladoDelIEAplicable:costeAcumuladoDelIEAplicable,\n vbat_periodoName:periodoName,\n vbat_PeridodDesc:periodoName\n };\n context.set(\"costeAcumuladoDelTerminoDePotencia\",costeAcumuladoDelTerminoDePotencia);\n context.set(\"costeAcumuladoDelCargoDePotencia\", costeAcumuladoDelCargoDePotencia);\n context.set(\"costeAcumuladoDelPeajeDePotencia\", costeAcumuladoDelPeajeDePotencia);\n context.set(\"costeAcumuladoDelIvaAplicable\",costeAcumuladoDelIvaAplicable);\n context.set(\"costeAcumuladoDelIEAplicable\", costeAcumuladoDelIEAplicable);\n return msg;\n }else{\n throw new Error(\"No vienen datos del balanceNeto\");\n }\n}\n\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1120,"y":960,"wires":[["b5665a4176ef0c4e","56715977c620f49b","c0aa52ce28c85e5f","fa07b895d816c850","3e3c45cc83f2a0d6"]]},{"id":"b5665a4176ef0c4e","type":"ha-mqtt-sensor","z":"445dac2cf9e0dbce","server":"8896a1b8d5985b9c","device":"0fc34afa72aa1f4d","name":"vbat_bassols_costeAccPotencia","unit_of_measurement":"","config":"{\"availability\":[{\"topic\":\"zigbee2mqtt/bridge/state\",\"value_template\":\"{{ value_json.state }}\"}],\"value_template\":\"{{ value_json.vbat_costeAcumuladoDelTerminoDePotencia }}\",\"unit_of_measurement\":\"€\",\"suggested_display_precision\":3,\"device_class\":\"monetary\",\"icon\":\"mdi:transmission-tower-export\"}","x":1670,"y":860,"wires":[]},{"id":"56715977c620f49b","type":"ha-mqtt-sensor","z":"445dac2cf9e0dbce","server":"8896a1b8d5985b9c","device":"0fc34afa72aa1f4d","name":"vbat_bassols_costeAccPeajes","unit_of_measurement":"","config":"{\"availability\":[{\"topic\":\"zigbee2mqtt/bridge/state\",\"value_template\":\"{{ value_json.state }}\"}],\"value_template\":\"{{ value_json.vbat_costeAcumuladoDelPeajeDePotencia }}\",\"unit_of_measurement\":\"€\",\"suggested_display_precision\":3,\"device_class\":\"monetary\",\"icon\":\"mdi:transmission-tower-export\"}","x":1670,"y":920,"wires":[]},{"id":"c0aa52ce28c85e5f","type":"ha-mqtt-sensor","z":"445dac2cf9e0dbce","server":"8896a1b8d5985b9c","device":"0fc34afa72aa1f4d","name":"vbat_bassols_costeAccCargos","unit_of_measurement":"","config":"{\"availability\":[{\"topic\":\"zigbee2mqtt/bridge/state\",\"value_template\":\"{{ value_json.state }}\"}],\"value_template\":\"{{ value_json.vbat_costeAcumuladoDelCargoDePotencia }}\",\"unit_of_measurement\":\"€\",\"suggested_display_precision\":3,\"device_class\":\"monetary\",\"icon\":\"mdi:transmission-tower-export\"}","x":1670,"y":980,"wires":[]},{"id":"fa07b895d816c850","type":"ha-mqtt-sensor","z":"445dac2cf9e0dbce","server":"8896a1b8d5985b9c","device":"0fc34afa72aa1f4d","name":"vbat_bassols_costeAccIVA","unit_of_measurement":"","config":"{\"availability\":[{\"topic\":\"zigbee2mqtt/bridge/state\",\"value_template\":\"{{ value_json.state }}\"}],\"value_template\":\"{{ value_json.vbat_costeAcumuladoDelIvaAplicable }}\",\"unit_of_measurement\":\"€\",\"suggested_display_precision\":3,\"device_class\":\"monetary\",\"icon\":\"mdi:transmission-tower-export\"}","x":1660,"y":1040,"wires":[]},{"id":"3e3c45cc83f2a0d6","type":"ha-mqtt-sensor","z":"445dac2cf9e0dbce","server":"8896a1b8d5985b9c","device":"0fc34afa72aa1f4d","name":"vbat_bassols_costeAccIE","unit_of_measurement":"","config":"{\"availability\":[{\"topic\":\"zigbee2mqtt/bridge/state\",\"value_template\":\"{{ value_json.state }}\"}],\"value_template\":\"{{ value_json.vbat_costeAcumuladoDelIEAplicable }}\",\"unit_of_measurement\":\"€\",\"suggested_display_precision\":3,\"device_class\":\"monetary\",\"icon\":\"mdi:transmission-tower-export\"}","x":1650,"y":1100,"wires":[]},{"id":"758d09c754dbda0f","type":"function","z":"445dac2cf9e0dbce","name":"node-function-exportacionaRed","func":"let balanceNeto = msg.balanceNeto;\nlet contrato= msg.contrato;\nlet slotHour=-1;\nlet slotPrice=0;\n\nlet exportedToGridData={\n\n precioCompensadoAplicadoXKwH:0.0,\n precioMedioDiarioCompensandoXKwH:0.0,\n \n energiaTotalCompensadaWatsH:0.0,\n energiaTotalPerdidaWatsH:0.0,\n\n valorCompensadoTotal:0.0,\n valorCompensadoActual:0.0\n\n}\nfunction resetData(){\n exportedToGridData={\n\n precioCompensadoAplicadoXKwH:0.0,\n precioMedioDiarioCompensandoXKwH:0.0,\n \n energiaTotalCompensadaWatsH:0.0,\n energiaTotalPerdidaWatsH:0.0,\n \n valorCompensadoTotal:0.0,\n valorCompensadoActual:0.0\n \n };\n return exportedToGridData\n}\n\nfunction loadDataFromContext(){\n exportedToGridData.precioMedioDiarioCompensandoXKwH=context.get(\"precioMedioDiarioCompensandoXKwH\") || 0;\n exportedToGridData.energiaTotalCompensadaWatsH=context.get(\"energiaTotalCompensadaWatsH\") || 0;\n exportedToGridData.energiaTotalPerdidaWatsH=context.get(\"energiaTotalPerdidaWatsH\") || 0;\n exportedToGridData.valorCompensadoTotal=context.get(\"valorCompensadoTotal\") || 0;\n}\n\nfunction storeDataInContext(){\n context.set(\"precioMedioDiarioCompensandoXKwH\",exportedToGridData.precioMedioDiarioCompensandoXKwH);\n context.set(\"energiaTotalCompensadaWatsH\",exportedToGridData.energiaTotalCompensadaWatsH);\n context.set(\"energiaTotalPerdidaWatsH\",exportedToGridData.energiaTotalPerdidaWatsH);\n context.set(\"valorCompensadoTotal\",exportedToGridData.valorCompensadoTotal);\n}\n\n\nif(msg.reset){\n resetData();\n msg.payload = { ...exportedToGridData};\n storeDataInContext();\n node.status({ fill: \"orange\", shape: \"dot\", text: \"Working fine. Reset applied\" });\n return msg;\n}\n\nloadDataFromContext();\nif(balanceNeto){\n slotHour=new Date(msg.balanceNeto.startAt).getHours();\n if(balanceNeto.feeded>0){\n if (contrato) {\n slotPrice=(contrato.compensacion[slotHour][1].total/-1000);\n \n exportedToGridData.valorCompensadoActual=(slotPrice*balanceNeto.feeded);\n exportedToGridData.precioCompensadoAplicadoXKwH=slotPrice*1000;\n\n exportedToGridData.valorCompensadoTotal+=exportedToGridData.valorCompensadoActual;\n exportedToGridData.energiaTotalCompensadaWatsH+=balanceNeto.feeded;\n exportedToGridData.precioMedioDiarioCompensandoXKwH = (exportedToGridData.valorCompensadoTotal/exportedToGridData.energiaTotalCompensadaWatsH)*1000;\n \n\n msg.payload={...exportedToGridData};\n storeDataInContext();\n node.status({ fill: \"green\", shape: \"dot\", text: \"Working fine. In bucket \" + new Date().toString() });\n return msg;\n }\n } \n}\nelse{\n throw new Error(\"No vienen datos del balanceNeto\");\n}\n","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1050,"y":280,"wires":[["934894ab89038afd","eefa2903bdf37d3a","4b789651f578faaf","2dc27f984630590a","b5be1488ada97321"]]},{"id":"934894ab89038afd","type":"ha-mqtt-sensor","z":"445dac2cf9e0dbce","server":"8896a1b8d5985b9c","device":"0fc34afa72aa1f4d","name":"vbat_bassols_precioCompensadoAplicadoXKwH","unit_of_measurement":"","config":"{\"availability\":[{\"topic\":\"zigbee2mqtt/bridge/state\",\"value_template\":\"{{ value_json.state }}\"}],\"value_template\":\"{{ value_json.precioCompensadoAplicadoXKwH }}\",\"unit_of_measurement\":\"€\",\"suggested_display_precision\":3,\"device_class\":\"monetary\",\"icon\":\"mdi:transmission-tower-export\"}","x":1720,"y":120,"wires":[]},{"id":"eefa2903bdf37d3a","type":"ha-mqtt-sensor","z":"445dac2cf9e0dbce","server":"8896a1b8d5985b9c","device":"0fc34afa72aa1f4d","name":"vbat_bassols_precioMedioDiarioCompensandoXKwH","unit_of_measurement":"","config":"{\"availability\":[{\"topic\":\"zigbee2mqtt/bridge/state\",\"value_template\":\"{{ value_json.state }}\"}],\"value_template\":\"{{ value_json.precioMedioDiarioCompensandoXKwH }}\",\"unit_of_measurement\":\"€\",\"suggested_display_precision\":3,\"device_class\":\"monetary\",\"icon\":\"mdi:transmission-tower-export\"}","x":1740,"y":180,"wires":[]},{"id":"4b789651f578faaf","type":"ha-mqtt-sensor","z":"445dac2cf9e0dbce","server":"8896a1b8d5985b9c","device":"0fc34afa72aa1f4d","name":"vbat_bassols_energiaTotalCompensadaWatsH","unit_of_measurement":"","config":"{\"availability\":[{\"topic\":\"zigbee2mqtt/bridge/state\",\"value_template\":\"{{ value_json.state }}\"}],\"value_template\":\"{{ value_json.energiaTotalCompensadaWatsH }}\",\"unit_of_measurement\":\"Wh\",\"suggested_display_precision\":3,\"device_class\":\"monetary\",\"icon\":\"mdi:transmission-tower-export\"}","x":1720,"y":260,"wires":[]},{"id":"2dc27f984630590a","type":"ha-mqtt-sensor","z":"445dac2cf9e0dbce","server":"8896a1b8d5985b9c","device":"0fc34afa72aa1f4d","name":"vbat_bassols_valorCompensadoActual","unit_of_measurement":"","config":"{\"availability\":[{\"topic\":\"zigbee2mqtt/bridge/state\",\"value_template\":\"{{ value_json.state }}\"}],\"value_template\":\"{{ value_json.valorCompensadoActual }}\",\"unit_of_measurement\":\"€\",\"suggested_display_precision\":3,\"device_class\":\"monetary\",\"icon\":\"mdi:transmission-tower-export\",\"expire_after\":3900}","x":1690,"y":320,"wires":[]},{"id":"b5be1488ada97321","type":"ha-mqtt-sensor","z":"445dac2cf9e0dbce","server":"8896a1b8d5985b9c","device":"0fc34afa72aa1f4d","name":"vbat_bassols_valorCompensadoTotal","unit_of_measurement":"","config":"{\"availability\":[{\"topic\":\"zigbee2mqtt/bridge/state\",\"value_template\":\"{{ value_json.state }}\"}],\"value_template\":\"{{ value_json.valorCompensadoTotal }}\",\"unit_of_measurement\":\"€\",\"suggested_display_precision\":3,\"device_class\":\"monetary\",\"icon\":\"mdi:transmission-tower-export\"}","x":1690,"y":380,"wires":[]},{"id":"aab47985461670a1","type":"function","z":"445dac2cf9e0dbce","name":"node-funcion-importaciondeRed","func":"let balanceNeto = msg.balanceNeto;\nlet contrato=msg.contrato;\n\nlet slotPrice=0;\nlet importedFromGridData={\n\n precioAplicadoXKwH:0.0,\n precioMedioDiarioXKwH:0.0,\n \n energiaTotalWatsH:0.0,\n energiaTotalPerdidaWatsH:0.0,\n\n valorGastadoTotal:0.0,\n valorGastadoActual:0.0\n}\n\n\nfunction resetData(){\n importedFromGridData={\n\n precioAplicadoXKwH:0.0,\n precioMedioDiarioXKwH:0.0,\n \n energiaTotalWatsH:0.0,\n energiaTotalPerdidaWatsH:0.0,\n \n valorGastadoTotal:0.0,\n valorGastadoActual:0.0\n \n };\n return importedFromGridData\n}\n\n\nfunction loadDataFromContext(){\n importedFromGridData.precioMedioDiarioXKwH=context.get(\"precioMedioDiarioXKwH\") || 0;\n importedFromGridData.energiaTotalWatsH=context.get(\"energiaTotalWatsH\") || 0;\n importedFromGridData.energiaTotalPerdidaWatsH=context.get(\"energiaTotalPerdidaWatsH\") || 0;\n importedFromGridData.valorGastadoTotal=context.get(\"valorGastadoTotal\") || 0;\n}\n\nfunction storeDataInContext(){\n context.set(\"precioMedioDiarioXKwH\",importedFromGridData.precioMedioDiarioXKwH);\n context.set(\"energiaTotalWatsH\",importedFromGridData.energiaTotalWatsH);\n context.set(\"energiaTotalPerdidaWatsH\",importedFromGridData.energiaTotalPerdidaWatsH);\n context.set(\"valorGastadoTotal\",importedFromGridData.valorGastadoTotal);\n}\n\nfunction getPrecioPeriodo(dayString){\n let slotDay=new Date(dayString).getDay();\n let slotHour=-1;\n let contrato= msg.contrato;\n\n if(slotDay>0 && slotDay<6){\n slotHour=new Date(msg.balanceNeto.startAt).getHours();\n }else{\n slotHour=0;\n }\n return ((contrato.energia[slotHour][1].total)/1000);\n}\n\n\nif(msg.reset){\n resetData();\n msg.payload = { ...importedFromGridData};\n storeDataInContext();\n node.status({ fill: \"orange\", shape: \"dot\", text: \"Working fine. Reset applied\" });\n return msg;\n}\n\n\n\n\n\nif(balanceNeto){\n loadDataFromContext();\n \n if(balanceNeto.feeded<0){\n if (contrato) {\n slotPrice=getPrecioPeriodo(msg.balanceNeto.startAt);\n importedFromGridData.valorGastadoActual=balanceNeto.feeded*(slotPrice);\n importedFromGridData.valorGastadoTotal+=importedFromGridData.valorGastadoActual;\n importedFromGridData.energiaTotalWatsH+=balanceNeto.feeded;\n importedFromGridData.precioAplicadoXKwH=slotPrice*1000;\n importedFromGridData.precioMedioDiarioXKwH=(importedFromGridData.valorGastadoTotal/importedFromGridData.energiaTotalWatsH)*1000;\n \n msg.payload={...importedFromGridData};\n storeDataInContext();\n node.status({ fill: \"green\", shape: \"dot\", text: \"Working fine. In bucket \"+new Date().toString() });\n return msg;\n }\n\n } \n}\nelse{\n throw new Error(\"No vienen datos del balanceNeto\");\n}","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1070,"y":580,"wires":[["fb795a5fb1d3e71b","c164e1c712006b6c","c1e6abb484fe7236","0cee2a34335e57bc","45ee991e20ac68a8"]]},{"id":"fb795a5fb1d3e71b","type":"ha-mqtt-sensor","z":"445dac2cf9e0dbce","server":"8896a1b8d5985b9c","device":"0fc34afa72aa1f4d","name":"vbat_bassols_valorGastadoActual","unit_of_measurement":"","config":"{\"availability\":[{\"topic\":\"zigbee2mqtt/bridge/state\",\"value_template\":\"{{ value_json.state }}\"}],\"value_template\":\"{{ value_json.valorGastadoActual }}\",\"unit_of_measurement\":\"€\",\"suggested_display_precision\":3,\"device_class\":\"monetary\",\"icon\":\"mdi:transmission-tower-export\",\"expire_after\":3900}","x":1680,"y":460,"wires":[]},{"id":"c164e1c712006b6c","type":"ha-mqtt-sensor","z":"445dac2cf9e0dbce","server":"8896a1b8d5985b9c","device":"0fc34afa72aa1f4d","name":"vbat_bassols_valorGastadoTotal","unit_of_measurement":"","config":"{\"availability\":[{\"topic\":\"zigbee2mqtt/bridge/state\",\"value_template\":\"{{ value_json.state }}\"}],\"value_template\":\"{{ value_json.valorGastadoTotal }}\",\"unit_of_measurement\":\"€\",\"suggested_display_precision\":3,\"device_class\":\"monetary\",\"icon\":\"mdi:transmission-tower-export\"}","x":1670,"y":520,"wires":[]},{"id":"c1e6abb484fe7236","type":"ha-mqtt-sensor","z":"445dac2cf9e0dbce","server":"8896a1b8d5985b9c","device":"0fc34afa72aa1f4d","name":"vbat_bassols_imported_energiaTotalWatsH","unit_of_measurement":"","config":"{\"availability\":[{\"topic\":\"zigbee2mqtt/bridge/state\",\"value_template\":\"{{ value_json.state }}\"}],\"value_template\":\"{{ value_json.energiaTotalWatsH }}\",\"unit_of_measurement\":\"KWh\",\"suggested_display_precision\":3,\"device_class\":\"monetary\",\"icon\":\"mdi:transmission-tower-export\"}","x":1710,"y":580,"wires":[]},{"id":"0cee2a34335e57bc","type":"ha-mqtt-sensor","z":"445dac2cf9e0dbce","server":"8896a1b8d5985b9c","device":"0fc34afa72aa1f4d","name":"vbat_bassols_imported_precioAplicadoXKwH","unit_of_measurement":"","config":"{\"availability\":[{\"topic\":\"zigbee2mqtt/bridge/state\",\"value_template\":\"{{ value_json.state }}\"}],\"value_template\":\"{{ value_json.precioAplicadoXKwH }}\",\"unit_of_measurement\":\"€\",\"suggested_display_precision\":3,\"device_class\":\"monetary\",\"icon\":\"mdi:transmission-tower-export\"}","x":1710,"y":640,"wires":[]},{"id":"45ee991e20ac68a8","type":"ha-mqtt-sensor","z":"445dac2cf9e0dbce","server":"8896a1b8d5985b9c","device":"0fc34afa72aa1f4d","name":"vbat_bassols_imported_precioMedioDiarioXKwH","unit_of_measurement":"","config":"{\"availability\":[{\"topic\":\"zigbee2mqtt/bridge/state\",\"value_template\":\"{{ value_json.state }}\"}],\"value_template\":\"{{ value_json.precioMedioDiarioXKwH }}\",\"unit_of_measurement\":\"€\",\"suggested_display_precision\":3,\"device_class\":\"monetary\",\"icon\":\"mdi:transmission-tower-export\"}","x":1720,"y":700,"wires":[]},{"id":"0589cd7d649604fa","type":"inject","z":"445dac2cf9e0dbce","name":"reset","props":[{"p":"payload"},{"p":"reset","v":"true","vt":"bool"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":990,"y":540,"wires":[["aab47985461670a1"]]},{"id":"bec8e8532b2bc50f","type":"inject","z":"445dac2cf9e0dbce","name":"reset","props":[{"p":"payload"},{"p":"reset","v":"true","vt":"bool"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":990,"y":740,"wires":[["c79bc434b900c3d7"]]},{"id":"339f3457f5b21e16","type":"inject","z":"445dac2cf9e0dbce","name":"reset","props":[{"p":"payload"},{"p":"reset","v":"true","vt":"bool"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":970,"y":900,"wires":[["f912c8cd8b5c0ccf"]]},{"id":"8896a1b8d5985b9c","type":"mqtt-broker","name":"mosquitos","broker":"mosquitto","port":1883,"clientid":"","autoConnect":true,"usetls":false,"protocolVersion":4,"keepalive":60,"cleansession":true,"autoUnsubscribe":true,"birthTopic":"","birthQos":"0","birthRetain":"false","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closeRetain":"false","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willRetain":"false","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""},{"id":"0fc34afa72aa1f4d","type":"ha-mqtt-device","name":"virtual-battery-balance-neto-horario","config":"{\"configuration_url\":\"http://192.168.1.137:1880\",\"identifiers\":[\"virtualbat_\"],\"manufacturer\":\"sunforce\",\"model\":\"RED_virtual-battery-balance-neto\",\"name\":\"\",\"via_device\":\"node-red-contrib-ha-mqtt-device\"}","retain":true}]