Ich hatte immer das Problem, das sich über einen Zeitraum von 4-5 Wochen mein RAM Speicher (4GB) vollgemüllt hat, und der CPU usage overall bei 15% lag.
Dem bin ich jetzt mal auf den Grund gegangen. Vorweg genommen es lag an Victron BLE.
Ich hatte damal diesen Post als Grundlage genommen.
und 4 Victrongeräte eingebunden.
Der Fehler liegt in der Exec Node, und der Inject Node die alle 10 Sekunden den Befehl
startet.
Dadurch wird alle 10 Sekunden eine neue Instanz aufgemacht, die durch den timeout nach 5 Sekunden abgebrochen werden sollte.
Der Start alle 10 Sekunden ist nicht nötig, das Script läuft nach einen einmaligen Start weiter und liefert die Daten.
Bricht der Timeout die Instanz nicht ab, sie läuft weiter.
Das hat zur Folge das etliche Instanzen laufen, und fast gleichzeitig alle 10 Sekunden ihre Abfrage starten und somit die CPU Leistung auf knapp 40% ansteigt, das ergibt dann den Durchschnitt von 15%. und der Ramspeicher wird auch überdurchschnittlich belastet.
Die Injekt Node habe ich umgestellt auf einmalig initialisieren nach 5 Sekunden ohne Wiederholung und den Text in der Exec Node habe ich so geändert
sudo /usr/local/bin/victron-ble read MAC@Key
CPU usage overall ist jetzt von 15% auf 6% gefallen, und der Anstieg des Ramspeichers ist auch nicht mehr so schnell. Das muss ich allerdingst noch beobachten, und eventuel schauen ob es wieder in den kritischen Bereich kommt.
Gruß Arno
Hallo Mario
Ich hab nen Bluetooth Dongle.
Wenn du alles zischen sudo und /usr/ löschst, und die inject node auf einmalig ohne Intervall änderst funktioniert es. Den ASUS BT Dongle hab ich nur wegen des GOK Gassensor der übrigens Müll ist.
Ich werde berichten wenn das bei mir passiert
Ich denke dem Script ist das egal wenn ein victron Gerät weg ist.
Aber man könnte die Daten überwachen, und wenn nix kommt das Script neustarten
Das mit dem leistungsproblem beim victron ble auf dem Pi hatte ich ebenfalls, da ich aber 7 Geräte hatte trat es bei mir schon nach wenigen Stunden auf.
Darum habe ich mir für die wichtigsten Geräte per esphome und einen esp32 was eigenes gebaut weil ich damals nichts gefunden habe … ich übertrage das dann in mqtt rein und frag es mit eigenen flows wieder ab… aktuell habe ich noch ein Venusos pi laufen um zu beobachten was sonnst noch alles abgefragt werden kann… der soll aber nicht bleiben
Also ich hab länge nicht mehr reingeguckt, was das skript machen, es läuft ja einfach.
Ich meine aber wenn das Gerät weg ist, wird erst ein scan gestartet ob es da ist und wenn ja, neu verbunden, sonst zeit x abgewartet und wieder nach gesucht.
Wie arno schon sagt, pro gerät das skript starten, aber nur einmalig.
Die daten kommen dann in eine regelmassigen abstand.
Bei Rolbra hatte man im Screenshot gesehen das dort unmengen an skripte am laufen waren. Irgendwann ist Ram und CPU dann am Ende.
Mit pkill -9 -f “prozessname” könnte man mit einen schlag alle Prozesse sofort beenden.
In meinen BMS Ble Flow mache ich das auch so, es wird normal gestoppt aber zur sicherheit ein paar sekunden später pkill hinterher gehauen.
Eigentlich müsste man in dem Flow nur die ausgeführten Prozesse ändern und den MQTT Punkt ändern. Dann würde der Flow bei nicht erhalten der Daten(über2min) das Skript neustarten.
Mit dem esp ist ne Möglichkeit, aber ich möchte so wenig wie möglich irgendwelche Satelliten rumliegen haben. Mich stört schon das ich zu blöd war die inetbox Truma über uart anzuschließen und deswegen einen pico darum hängen habe