Victron Smart Shunt via Bluetooth einbinden

Hallo, ich habe den verkabelten Pekaway Shunt gegen einen Victron Energy SmartShunt IP65 300A/50mV - Smart Shunt Batteriewächter (Bluetooth) getauscht.

Dieser soll via BT verbunden werden:

Leider werden bei der Shunt Anzeige aber nur “wirre” Daten angezeigt:

Geht das so oder soll ich ihn via BT BLE anbinden: Victron Geräte Verbindung via Bluetooth - Stromversorgung - Pekaway

machs über Victron BLE und ich schick dir meinen flow dazu

[{"id":"3b7efe18cd531c19","type":"inject","z":"edeb94a459c4553a","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"10","crontab":"","once":true,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":150,"y":40,"wires":[["7b64fe195f2a3970","a0411929543fc4f9","c38dcd2e2cda9c9a"]]},{"id":"bbcf764afa516d23","type":"group","z":"edeb94a459c4553a","style":{"stroke":"#999999","stroke-opacity":"1","fill":"none","fill-opacity":"1","label":true,"label-position":"nw","color":"#a4a4a4"},"nodes":["c38dcd2e2cda9c9a","47e797498ec6a66a","82b2701a3f914d03","daa43575d4a4499b","c17763b87ca98b64","753f5b5ec72f205f","b2e78f06cc0c0ce7","8b70a2f3df2855e2","8d2ad82651280bec","e3dc1025e7b51015","6e96d4c770f3fd42","2913461f2c99fb41","0dec92053f220fee","2d60b751da271662","ab6ffe28f44916b3","c4a509e15e6e6735","752791173add7c32","c229bc8a4dc9b9f4","1dda77cc6db32735","e9c8c0e3e2cf57db","ef01b78d8a188167","61726ac3ce74a942","645ef16a154e2f07","5d5b01e515b3ff5c","c766cc3ebf604bd1","17ca261874f36f24","dbfe319b284daaa9","b854d1eaff378b17","e2b33d726905cee1","542a16698617b34d","0dfd5841996181c4","6d927cbafd5759dc","3e7ef7e7e0f0e43d","cc6ab9e9f6220c4f","915a0149f3a87adb"],"x":314,"y":39,"w":1152,"h":922},{"id":"c38dcd2e2cda9c9a","type":"exec","z":"edeb94a459c4553a","g":"bbcf764afa516d23","command":"sudo timeout -s SIGINT 10s /usr/local/bin/victron-ble read D2:8E:92:63:A7:96@f336b7f5ee4f66ae7fc2b136c06a832d","addpay":false,"append":"","useSpawn":"true","timer":"","winHide":false,"oldrc":false,"name":"Exec","x":390,"y":140,"wires":[["47e797498ec6a66a"],[],[]]},{"id":"47e797498ec6a66a","type":"json","z":"edeb94a459c4553a","g":"bbcf764afa516d23","name":"victron-ble to json","property":"payload","action":"","pretty":false,"x":570,"y":140,"wires":[["82b2701a3f914d03","6e96d4c770f3fd42","2913461f2c99fb41","0dec92053f220fee","2d60b751da271662","ab6ffe28f44916b3","1dda77cc6db32735","c229bc8a4dc9b9f4","752791173add7c32","ef01b78d8a188167","61726ac3ce74a942","c766cc3ebf604bd1","b854d1eaff378b17","e2b33d726905cee1"]]},{"id":"82b2701a3f914d03","type":"debug","z":"edeb94a459c4553a","g":"bbcf764afa516d23","name":"Debug Victron Smart Shunt","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":840,"y":920,"wires":[]},{"id":"daa43575d4a4499b","type":"ui_text","z":"edeb94a459c4553a","g":"bbcf764afa516d23","group":"5bffe643c0265073","order":10,"width":0,"height":0,"name":"Name","label":"Name","format":"{{msg.payload.name}}","layout":"row-spread","className":"","style":false,"font":"","fontSize":"","color":"#000000","x":1390,"y":880,"wires":[]},{"id":"c17763b87ca98b64","type":"ui_text","z":"edeb94a459c4553a","g":"bbcf764afa516d23","group":"5bffe643c0265073","order":7,"width":0,"height":0,"name":"Strom","label":"Strom","format":"{{msg.payload}} A","layout":"row-spread","className":"","style":false,"font":"","fontSize":"","color":"#000000","x":1390,"y":560,"wires":[]},{"id":"753f5b5ec72f205f","type":"ui_text","z":"edeb94a459c4553a","g":"bbcf764afa516d23","group":"5bffe643c0265073","order":8,"width":0,"height":0,"name":"Leistung","label":"Leistung","format":"{{msg.payload}} W","layout":"row-spread","className":"","style":false,"font":"","fontSize":"","color":"#000000","x":1380,"y":640,"wires":[]},{"id":"b2e78f06cc0c0ce7","type":"ui_text","z":"edeb94a459c4553a","g":"bbcf764afa516d23","group":"5bffe643c0265073","order":3,"width":"4","height":"1","name":"TTGO","label":"TTGO","format":"{{msg.payload}}","layout":"row-spread","className":"","style":false,"font":"","fontSize":"","color":"#000000","x":1390,"y":720,"wires":[]},{"id":"8b70a2f3df2855e2","type":"ui_text","z":"edeb94a459c4553a","g":"bbcf764afa516d23","group":"5bffe643c0265073","order":2,"width":"2","height":"1","name":"SOC","label":"SOC","format":"{{msg.payload}} %","layout":"row-spread","className":"","style":false,"font":"","fontSize":"","color":"#000000","x":1390,"y":120,"wires":[]},{"id":"8d2ad82651280bec","type":"ui_text","z":"edeb94a459c4553a","g":"bbcf764afa516d23","group":"5bffe643c0265073","order":12,"width":0,"height":0,"name":"MAC","label":"MAC","format":"{{msg.payload.address}}","layout":"row-spread","className":"","style":false,"font":"","fontSize":16,"color":"#000000","x":1390,"y":840,"wires":[]},{"id":"e3dc1025e7b51015","type":"ui_text","z":"edeb94a459c4553a","g":"bbcf764afa516d23","group":"5bffe643c0265073","order":4,"width":"6","height":"1","name":"Spannung Gesamt","label":"Spannung Gesamt","format":"{{msg.payload}} V","layout":"row-spread","className":"","style":false,"font":"","fontSize":16,"color":"#000000","x":1350,"y":200,"wires":[]},{"id":"6e96d4c770f3fd42","type":"function","z":"edeb94a459c4553a","g":"bbcf764afa516d23","name":"TTGO","func":"const minutes = msg.payload.payload.remaining_mins;\n\nfunction formatTime(minutes) {\n    let weeks = Math.floor(minutes / (7 * 24 * 60));\n    minutes %= (7 * 24 * 60);\n\n    let days = Math.floor(minutes / (24 * 60));\n    minutes %= (24 * 60);\n\n    let hours = Math.floor(minutes / 60);\n    minutes %= 60;\n\n    // Construct the time string dynamically\n    let result = [];\n    if (weeks > 0) result.push(`${weeks} Woche${weeks > 1 ? 's' : ''}`);\n    if (days > 0) result.push(`${days} Tag${days > 1 ? 'e' : ''}`);\n    if (hours > 0) result.push(`${hours} Stunde${hours > 1 ? 'n' : ''}`);\n    if (minutes > 0) result.push(`${minutes} Minute${minutes > 1 ? 's' : ''}`);\n\n    return result.join(\", \");\n}\n\nif (minutes == -1) {\n    msg.label = \"Time to Full\"\n    global.set(\"VE_timetogo\", \"charging\");\n\n    // Get values from global context\n    let consumedAh = Number(global.get(\"VE_consumedAH\")); // Negative value (e.g., -55.55)\n    let chargingCurrentA = Number(global.get(\"VE_Current\")); // Current in Amps\n\n    // Prevent division by zero\n    if (chargingCurrentA <= 0) {\n        msg.payload = \"Not charging\";\n        return msg;\n    }\n\n    // Calculate time in minutes\n    let timeToFullMinutes = (consumedAh * -1) / chargingCurrentA / 0.016666666;\n\n    // Convert minutes to weeks, days, hours, and minutes\n    let weeks = Math.floor(timeToFullMinutes / 10080); // 10080 minutes in a week\n    let days = Math.floor((timeToFullMinutes % 10080) / 1440); // 1440 minutes in a day\n    let hours = Math.floor((timeToFullMinutes % 1440) / 60);\n    let minutes = Math.round(timeToFullMinutes % 60);\n\n    // Build the formatted result dynamically, omitting zero values\n    let timeFormatted = [];\n\n    if (weeks > 0) timeFormatted.push(`${weeks} week${weeks > 1 ? \"s\" : \"\"}`);\n    if (days > 0) timeFormatted.push(`${days} day${days > 1 ? \"s\" : \"\"}`);\n    if (hours > 0) timeFormatted.push(`${hours} hour${hours > 1 ? \"s\" : \"\"}`);\n    if (minutes > 0) timeFormatted.push(`${minutes} minute${minutes > 1 ? \"s\" : \"\"}`);\n\n    // If all values are 0, show \"less than a minute\"\n    if (timeFormatted.length === 0) {\n        timeFormatted.push(\"less than a minute\");\n    }\n\n    // Join values with commas\n    msg.payload = timeFormatted.join(\", \");\n    global.set(\"VE_TimeToFull\", msg.payload);\n}\nelse {\n    msg.payload = formatTime(minutes)\n    msg.label = \"Time To Go\"\n    global.set(\"VE_timetogo\", msg.payload);\n}\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":770,"y":720,"wires":[["b2e78f06cc0c0ce7"]]},{"id":"2913461f2c99fb41","type":"function","z":"edeb94a459c4553a","g":"bbcf764afa516d23","name":"Strom","func":"msg.payload = msg.payload.payload.current.toFixed(2);\n\nglobal.set(\"VE_Current\", msg.payload);\nglobal.set(\"BATTamps\", msg.payload);\nglobal.set(\"MainBattAmps\", msg.payload);\n\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":770,"y":560,"wires":[["cc6ab9e9f6220c4f"]]},{"id":"0dec92053f220fee","type":"function","z":"edeb94a459c4553a","g":"bbcf764afa516d23","name":"Spannung Gesamt","func":"msg.payload = msg.payload.payload.voltage;\n\nglobal.set(\"VE_Mainbattery\", msg.payload);\nglobal.set(\"BATTvolt\", msg.payload);\n//global.set(\"VE_BatteryVolt\", msg.payload);\n\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":810,"y":200,"wires":[["e3dc1025e7b51015"]]},{"id":"2d60b751da271662","type":"function","z":"edeb94a459c4553a","g":"bbcf764afa516d23","name":"SOC","func":"msg.payload = msg.payload.payload.soc;\n\nglobal.set(\"VE_SOC\", msg.payload);\nglobal.set(\"BATTsoc\", msg.payload);\n\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":770,"y":120,"wires":[["8b70a2f3df2855e2"]]},{"id":"ab6ffe28f44916b3","type":"function","z":"edeb94a459c4553a","g":"bbcf764afa516d23","name":"Verbrauchte Ah","func":"msg.payload = msg.payload.payload.consumed_ah;\n\nglobal.set(\"VE_consumedAH\", msg.payload);\n\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":800,"y":800,"wires":[["c4a509e15e6e6735"]]},{"id":"c4a509e15e6e6735","type":"ui_text","z":"edeb94a459c4553a","g":"bbcf764afa516d23","group":"5bffe643c0265073","order":11,"width":0,"height":0,"name":"Verbrauchte Ah","label":"Verbrauchte Ah","format":"{{msg.payload}} Ah","layout":"row-spread","className":"","style":false,"font":"","fontSize":16,"color":"#000000","x":1360,"y":800,"wires":[]},{"id":"752791173add7c32","type":"debug","z":"edeb94a459c4553a","g":"bbcf764afa516d23","name":"Alarm","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload.payload.alarm","targetType":"msg","statusVal":"","statusType":"auto","x":770,"y":840,"wires":[]},{"id":"c229bc8a4dc9b9f4","type":"debug","z":"edeb94a459c4553a","g":"bbcf764afa516d23","name":"Aux Mode","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload.payload.aux_mode","targetType":"msg","statusVal":"","statusType":"auto","x":790,"y":880,"wires":[]},{"id":"1dda77cc6db32735","type":"function","z":"edeb94a459c4553a","g":"bbcf764afa516d23","name":"RSSI","func":"\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":770,"y":760,"wires":[["e9c8c0e3e2cf57db"]]},{"id":"e9c8c0e3e2cf57db","type":"ui_text","z":"edeb94a459c4553a","g":"bbcf764afa516d23","group":"5bffe643c0265073","order":9,"width":0,"height":0,"name":"RSSI","label":"RSSI","format":"{{msg.payload.rssi}}","layout":"row-spread","className":"","style":false,"font":"","fontSize":16,"color":"#000000","x":1390,"y":760,"wires":[]},{"id":"ef01b78d8a188167","type":"function","z":"edeb94a459c4553a","g":"bbcf764afa516d23","name":"Leistung","func":"msg.payload = (msg.payload.payload.current * msg.payload.payload.voltage).toFixed(2);\nglobal.set(\"VE_Power\", msg.payload);\n\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":780,"y":640,"wires":[["915a0149f3a87adb"]]},{"id":"61726ac3ce74a942","type":"function","z":"edeb94a459c4553a","g":"bbcf764afa516d23","name":"Typenbezeichung","func":"msg.payload = msg.payload.payload.model_name;\n\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":810,"y":80,"wires":[["645ef16a154e2f07"]]},{"id":"645ef16a154e2f07","type":"ui_text","z":"edeb94a459c4553a","g":"bbcf764afa516d23","group":"5bffe643c0265073","order":1,"width":0,"height":0,"name":"Typenbezeichnung","label":"Typenbezeichung","format":"{{msg.payload}}","layout":"row-spread","className":"","style":false,"font":"","fontSize":16,"color":"#000000","x":1350,"y":80,"wires":[]},{"id":"5d5b01e515b3ff5c","type":"comment","z":"edeb94a459c4553a","g":"bbcf764afa516d23","name":"Victron Smart Shunt","info":"","x":430,"y":80,"wires":[]},{"id":"c766cc3ebf604bd1","type":"function","z":"edeb94a459c4553a","g":"bbcf764afa516d23","name":"Spannung Batterie 1","func":"msg.payload = msg.payload.payload.midpoint_voltage.toFixed(2);\n\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":820,"y":280,"wires":[["6d927cbafd5759dc"]]},{"id":"17ca261874f36f24","type":"ui_text","z":"edeb94a459c4553a","g":"bbcf764afa516d23","group":"5bffe643c0265073","order":5,"width":"3","height":"1","name":"Batterie(1)","label":"Batt(1)","format":"{{msg.payload}} V","layout":"row-spread","className":"","style":false,"font":"","fontSize":16,"color":"#000000","x":1370,"y":280,"wires":[]},{"id":"dbfe319b284daaa9","type":"ui_text","z":"edeb94a459c4553a","g":"bbcf764afa516d23","group":"5bffe643c0265073","order":6,"width":"3","height":"1","name":"Batterie(2)","label":"Batt(2)","format":"{{msg.payload}} V","layout":"row-spread","className":"","style":false,"font":"","fontSize":16,"color":"#000000","x":1370,"y":400,"wires":[]},{"id":"b854d1eaff378b17","type":"function","z":"edeb94a459c4553a","g":"bbcf764afa516d23","name":"Spannung Batterie 2","func":"msg.payload = (msg.payload.payload.voltage - msg.payload.payload.midpoint_voltage).toFixed(2);\n\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":820,"y":400,"wires":[["3e7ef7e7e0f0e43d"]]},{"id":"e2b33d726905cee1","type":"function","z":"edeb94a459c4553a","g":"bbcf764afa516d23","name":"Spannung Diff in %","func":"let BatterieSpannungGesamt = msg.payload.payload.voltage;\nlet BatterieSpannung1 = msg.payload.payload.midpoint_voltage;\nlet BatterieSpannung2 = (msg.payload.payload.voltage - msg.payload.payload.midpoint_voltage);\n\nmsg.payload = (BatterieSpannung1 - BatterieSpannung2) / BatterieSpannungGesamt * 100;\n\nglobal.set(\"VE_Aux\", msg.payload);\n\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":810,"y":520,"wires":[[]]},{"id":"542a16698617b34d","type":"ui_text","z":"edeb94a459c4553a","g":"bbcf764afa516d23","group":"d7b10e4dc1f23ce3","order":8,"width":"3","height":"1","name":"","label":"Batterie(1)","format":"{{msg.payload}} V","layout":"col-center","className":"","style":false,"font":"","fontSize":"","color":"#000000","x":1370,"y":320,"wires":[]},{"id":"0dfd5841996181c4","type":"ui_text","z":"edeb94a459c4553a","g":"bbcf764afa516d23","group":"d7b10e4dc1f23ce3","order":17,"width":"3","height":"1","name":"","label":"Batterie(2)","format":"{{msg.payload}} V","layout":"col-center","className":"","style":false,"font":"","fontSize":"","color":"#000000","x":1370,"y":440,"wires":[]},{"id":"6d927cbafd5759dc","type":"change","z":"edeb94a459c4553a","g":"bbcf764afa516d23","name":"Convert to Number","rules":[{"t":"set","p":"payload","pt":"msg","to":"$number(msg.payload)","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":1030,"y":280,"wires":[["17ca261874f36f24","542a16698617b34d"]]},{"id":"3e7ef7e7e0f0e43d","type":"change","z":"edeb94a459c4553a","g":"bbcf764afa516d23","name":"Convert to Number","rules":[{"t":"set","p":"payload","pt":"msg","to":"$number(msg.payload)","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":1030,"y":400,"wires":[["dbfe319b284daaa9","0dfd5841996181c4"]]},{"id":"cc6ab9e9f6220c4f","type":"change","z":"edeb94a459c4553a","g":"bbcf764afa516d23","name":"Convert to Number","rules":[{"t":"set","p":"payload","pt":"msg","to":"$number(msg.payload)","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":930,"y":560,"wires":[["c17763b87ca98b64"]]},{"id":"915a0149f3a87adb","type":"change","z":"edeb94a459c4553a","g":"bbcf764afa516d23","name":"Convert to Number","rules":[{"t":"set","p":"payload","pt":"msg","to":"$number(msg.payload)","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":950,"y":640,"wires":[["753f5b5ec72f205f"]]},{"id":"5bffe643c0265073","type":"ui_group","name":"Smart Shunt","tab":"a101d9ff5688fa9e","order":2,"disp":true,"width":"6","collapse":true,"className":""},{"id":"d7b10e4dc1f23ce3","type":"ui_group","name":"Victron Shunt","tab":"deee53a800de461d","order":1,"disp":true,"width":"6","collapse":true,"className":""},{"id":"a101d9ff5688fa9e","type":"ui_tab","name":"Victron BLE","icon":"mi-usb","order":7,"disabled":false,"hidden":false},{"id":"deee53a800de461d","type":"ui_tab","name":"Info","icon":"mi-info","order":1,"disabled":false,"hidden":false}]

Hallo Mario, vielen Dank für deinen Flow.

Leider bekomme ich keine Werte geliefert. Beim Blue Smart IP22 Charger kommen Werte.

hast du die Mac Adresse und den kodierschlüssel ersetzt?

Ja hatte ich.

Ich musste aber die scanner.py anpassen Victron Geräte Verbindung via Bluetooth - #44 by Vincent

Nur Batterie 1 werden keine Werte angezeigt. Batterie 2 auch nicht, aber die habe ich auch nicht angeschlossen. Ebenso kommt die MAC und TTGO nicht, wobei TTGO noch einen Tag dauern kann:

ah batterie 1 und 2 wirst du auch nicht bekommen da du den aux Anschluss nicht verwendest und ich hab da eine Funktion geschrieben da ich ein 24v system habe

der rest sollte aber gehen aber mach mal die “debug victron smart shunt” node an und poste das Ergebnis

PS: wenn du meinen flow 1:1 genommen hast is klar da ich gerade gesehen hab das die Mac und Name garnicht verbunden sind und daher auch nicht ausgelesen werden

OK, habe die Nodes für Batterie1+2 deaktiviert.

Warum kommt aber kein Name und MAC und Typenbezeichnung?

Was bedeutet der Wert RSSI ?

“debug victron smart shunt” ist an. habe es auf Kompletten Nachrichten Object” umgestellt. aber es wird dort nichts ausgegeben…


ist nicht verbunden

RSSI ist die Signalstärke vom BLE Gerät


das kommt bei mir alles an Daten an

Hi, ich habe es ausprobiert so die Victron Shunt daten zu bekommen und sie werden mir auch alle angezeigt. Ich würde die shunt Daten aber gern auch in der App angezeigt bekommen. Dort taucht aber nur der Ampere Wert auf.

Ich lese mich gerade erst ein wie das Pekaway Node red aufgebaut ist…daher noch etwas holprig.
Muss ich die Daten als Globals schreiben oder kann ich den Ve.direct flow mit den Messages verknüpfen damit ich die Daten als “echte” victron Daten sehen kann?

Hast du mal auf der Seite Config, System die mainbat auf victron eingestellt??

du musst dann nur noch die richtigen werte in die richtigen Globals kopieren dann geht das … bei mir hat nur nach dem update auf 2.1.0 etwas zu spinnen gegonnen und hab dann bissl was vom original code deaktivieren müssen

globals für SOC

    global.set("VE_SOC", msg.payload);
    global.set("BATTsoc", msg.payload);
    global.set("BMSsoc", msg.payload);
    global.set("pkwshuntSOC", msg.payload);
    global.set("MainBattSoc", msg.payload); // Pekaway Conect App

globals für spannung

global.set(“VE_Mainbattery”, msg.payload);
global.set(“BATTvolt”, msg.payload);
global.set(“VE_BatteryVolt”, msg.payload);
global.set(“pkwshuntvolt”, msg.payload);
global.set(“BMSvolt”, msg.payload);
global.set(“MainBattVolt”, msg.payload); // Pekaway Conect App

globals für Strom

global.set(“VE_Current”, msg.payload);
global.set(“BATTamps”, msg.payload);
global.set(“BMSamps”, msg.payload);
global.set(“MainBattAmps”, msg.payload); // Pekaway Conect App

globals für Leistung

global.set(“VE_Power”, msg.payload);
global.set(“BMSpower”, msg.payload);

Danke für die Tipps!

Ich habe es jetzt direkt in den Ve.direct Flow eingebunden, da werden die Roh Daten ja verarbeitet und die globales von Smartshunt und Solar eh direkt gesetzt.

Falls jemand was ähnliches machen möchte, diese Nodes sind bei mir eingefügt und gehen dann an die ursprünglichen schnittstellen ran. Dafür musste ich dann Dummy mäßig einen usb Port als ve.direct stellen damit die Daten angezeigt werden.

Nur leider bekomme ich aus meinem smart shunt derzeit keine time to go oder remaining minutes raus. Keine Ahnung wieso der das nicht ausgibt.

[{"id":"206b0ac480207117","type":"exec","z":"f3c72e93.fad02","command":"sudo timeout -s SIGINT 10s /usr/local/bin/victron-ble read E7:AC:4D:61:95:FE@1df50dff47bbee9121784fff760369b5","addpay":false,"append":"","useSpawn":"true","timer":"","winHide":false,"oldrc":false,"name":"Exec","x":490,"y":460,"wires":[["5aae900022ee5b62"],[],[]]},{"id":"6b3453c5151052ca","type":"exec","z":"f3c72e93.fad02","command":"sudo timeout -s SIGINT 10s /usr/local/bin/victron-ble read E0:A2:DD:23:27:DE@7678543817115dd56396b4047d2d3b13","addpay":false,"append":"","useSpawn":"true","timer":"","winHide":false,"oldrc":false,"name":"Exec","x":490,"y":540,"wires":[["4bdc5a71d79cfc21"],[],[]]},{"id":"4bdc5a71d79cfc21","type":"json","z":"f3c72e93.fad02","name":"victron-ble to json","property":"payload","action":"","pretty":false,"x":690,"y":540,"wires":[["f554987c66c3e7ca"]]},{"id":"f554987c66c3e7ca","type":"function","z":"f3c72e93.fad02","name":"Smart Solar MPPT","func":"\n\nmsg.payload = {\n    PID: \"0xA056\",\n    FW: msg.payload.FW || msg.payload.FWE || \"\",\n    SER: msg.payload[\"SER#\"] || \"\",\n\n    Vbatt: Number(msg.payload.payload.battery_voltage) || 0,\n    Current: Number(msg.payload.payload.battery_charging_current) || 0,\n    PanelVolt: Number(msg.payload.payload.VPV) || 0,\n    PanelPower: Number(msg.payload.payload.solar_power) || 0,\n\n    Error: msg.payload.payload.ERR || \"\",\n    State: msg.payload.payload.CS || \"\",\n    LoadState: msg.payload.payload.LOAD || \"\",\n    Iload: Number(msg.payload.payload.IL) / 1000 || 0\n};\n\n// Important for existing mppt consumers\nglobal.set(\"mppt_pv_watts\", msg.payload.PanelPower);\nglobal.set(\"mppt_pv_amps\", msg.payload.Current);\nglobal.set(\"mppt_pv_total\", \"100\");\nglobal.set(\"mppt_pv_volts\", msg.payload.Vbatt);\n\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":930,"y":580,"wires":[["39717598fd2a69c3"]]},{"id":"1dbfca7736240fbb","type":"function","z":"f3c72e93.fad02","name":"Shunt","func":"\nfunction formatTime(minutes) {\n    minutes = Number(minutes);\n\n    if (minutes === -1) return \"charging\";\n    if (!Number.isFinite(minutes) || minutes <= 0) return \"—\";\n\n    minutes = Math.round(minutes);\n\n    const days = Math.floor(minutes / (24 * 60));\n    minutes %= 24 * 60;\n\n    const hours = Math.floor(minutes / 60);\n    const mins = minutes % 60;\n\n    if (days > 0) {\n        return hours > 0 ? `${days}d, ${hours}h` : `${days}d`;\n    }\n\n    if (hours > 0) {\n        return mins > 0 ? `${hours}h, ${mins}m` : `${hours}h`;\n    }\n\n    return `${mins}m`;\n}\n\nlet ttgRaw = 0;\n\nmsg.payload = {\n    PID: \"0xC038\",\n\n    Vbatt: + Number(msg.payload.payload.voltage).toFixed(2) || 0,\n    Current: +Number(msg.payload.payload.current).toFixed(2) || 0,\n    Power: Number(msg.payload.payload.voltage*msg.payload.payload.current).toFixed(2) || 0,\n\n    CE: +Number(msg.payload.payload.consumed_ah).toFixed(2) || 0,\n    SOC: +Number(msg.payload.payload.soc).toFixed(1) || 0,\n\n    TTG: ttgRaw,\n    TTGLabel: ttgRaw === -1 ? \"state\" : \"ttgo\",\n    TTGText: formatTime(ttgRaw),\n\n    updated: Date.now(),\n    updatedText: new Date().toLocaleTimeString()\n    \n};\n\nmsg.payload.deviceName = msg.deviceName\nmsg.payload.History = global.get(\"VE_SHUNT_HISTORY\") || {};\n\n// Werte global speichern\nglobal.set(\"VE_timetogo\", msg.payload.TTGText)\nglobal.set(\"VE_SHUNT\", {\n    pid: msg.payload.PID,\n    deviceName: msg.deviceName,\n    port: msg.port,\n    uart: msg.uart,\n\n    mainBatteryVolt: msg.payload.Vbatt,\n    auxBatteryVolt: msg.payload.Vaux,\n    current: msg.payload.Current,\n    power: msg.payload.Power,\n\n    consumedAh: msg.payload.CE,\n    soc: msg.payload.SOC,\n\n    timeToGoRaw: msg.payload.TTG,\n    timeToGoLabel: msg.payload.TTGLabel,\n    timeToGoText: msg.payload.TTGText,\n\n    minVolt: msg.payload.History.minMainBatteryVolt || 0,\n    maxVolt: msg.payload.History.maxMainBatteryVolt || 0,\n\n    updated: Date.now(),\n    updatedText: new Date().toLocaleTimeString()\n});\n\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":890,"y":500,"wires":[["aa142a1fbe951c23","af58442cb3636219"]]},{"id":"5aae900022ee5b62","type":"json","z":"f3c72e93.fad02","name":"victron-ble to json","property":"payload","action":"","pretty":false,"x":690,"y":460,"wires":[["1dbfca7736240fbb"]]},{"id":"27e9dd8fa4b18d41","type":"inject","z":"f3c72e93.fad02","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"10","crontab":"","once":true,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":290,"y":540,"wires":[["6b3453c5151052ca","206b0ac480207117"]]}]