Node Red - Werte berechnen und verändern

Hallo Leute!

Da ich von Javascript kA habe, würde ich da wirklich gerne mit euch meine Änderung besprechen und coden. Besten Dank für Unterstützung!
Bitte nicht über den Sinn und Zweck diskutieren, es hat alles seinen Grund und seine Aufgabe, ich frage um die Manipulation der Werte.

Es geht darum, das 2. ESS (welches nur die Batterie lädt) auszubremsen. Schön wäre ja eine AI die Anhang von Wetterdaten und Gepflogenheiten das selbst regulieren würde, aber das ist Wunschgedanke. Beginnen möchte ich mit fixen Settings wie max. Ladestrom, welche ich im ioBroker einstelle und per Mqtt an den Cerbo übergebe.

Wichtig ist die Überprüfung bzw. Überwachung. Wenn da was nicht passt auf “0” stellen.

  • Kommunikation mit dem ioBroker
  • Kommunikation zum BMS

flows.json.zip (4,6 KB)

dazu werden Werte angelegt :

→ ich bin jetzt gerade mit dem Umbau auf den 1000A Smart Shunt beschäftigt, weitere Infos folgen.

hallo,

kann man machen, ich empfehle aber IMMER, die daten vom gx aus ueber mqtt abzurufen, denn da kann man einen timeout hinterlegen, dass z.B. bei unterbrechung der netzwerkverbindung das system in einen sicheren zustand versetzt wird!

wenn du ein bms mit node-red virtuell einbindest, kannst du die ladung perfekt steuern!

tschuess

ich stehe da mit Mqtt etwas auf Kriesfuß, das hat mich auch schon so geärgert und wenn man was fragt, kriegt man nur blöde Antworten.

Ich lege einen Wert im ioBroker an und schreibe darauf, der ioBroker ist ein Mqtt Client, der Mqtt Server ist der CX. Wie sollte da eine oder andere Richtung laufen…..

hallo,

in iobrocker gibt es sowohl einen mqtt-client als auch einen mqtt-server. wenn du von node-red oder eine anderen moeglichkeit nutzt, kann der cerbo ueber node-red diese daten abrufen und ueberwachen, dass er innerhalb eines bstimmten zeitraums eine aktualisierung bekommt und wenn die ausfaellt, darauf zu reagieren.

wenn du von iobrocker aber ueber mqtt auf dem gx den netzsollwert auf -5 kW setzt und die netzverbindung oder iobrocker ausfaellt, wird das system die 5 kW ins netz einspeisen, bis der akku leer ist. ist ein timeout hinterlegt, wird die einspeisung deaktiviert.

du kannst aber auch das ess im mode external controlled steuern, in dem fall ueberwacht das system da selbst und stellt die einspeisung, aber eventuell auch die versorgung der verbraucher aus dem akku ein!

wie es beim simulierten bms ohne aktualisierung aussieht, weiss ich nicht, das habe ich noch nicht ausprobiert!

das einzige problem mit mqtt, seit dem update des mqtt-servers auf dem gx, besteht darin, dass der nur noch aenderungen ausliefert, das bedeutet aber auch, dass man nach dem verbinden erst dann einen wert bekommt, wenn er sich geaendert hat. bei einer ueberwachung mit timeout ist das aber ein problem, deshalb muss man diese werte dann aktiv abrufen.

es ist aber kein problem, wenn sich iobrocker seine daten beim gx ueber mqtt holt und das gx die daten beim iobrocker.

ich bentze zwar keinen iobrocker, weil er mir nichts bringt, habe aber auf einem odroid m1 einen mqtt-server und eine node-red-instanz laufen, ueber die ein grossteil meiner anlage gesteuert wird. dazu kommt dann noch eigene software zur datenerfassung und steuerung sowie eine mysql-datenbank fuer die aktuellen daten und die langzeiterfassung.

du kannst zwar auch eine ueberwachung auf dem gx mit node-red einrichten, wenn du die daten von iobrocker aus schreibst, dazu musst du sie mit node-red auf dem gx aber wieder vom lokalen mqtt-server abrufen und auf einen timeout ueberwachen und dann entsprechend reagieren!

tschuess

ganz so einfach ist es nicht

So wie ich es verstehe macht er es schon richtig - der MQTT-Broker läuft auf dem Cerbo, IO-Broker ist nur die GUI, also das Benutzerinterface um einfach gewünschte Werte wie z.B. 5kW zu übermiteln

Will man hier zusätzliche Sicherheiten einbauen muss man über Dinge wie last-will-topic nachdenken

Öaienmethode wäre wohl in IOBroker über Blockly usw was zu basteln das der Wert z.B alle 60sec geschickt wird - NodeRED auf dem Cerbo proft dann ob die letzten 120sec was geschickt wurde

Für genau solche DInge nutze ich übrigens sehr gerne ChatGPT, das ist hier meiner Meinung nach sehr gut im Coden

andersrum - bei MQTT abonniert man ein Topic, abrufen tut man da nichts

Wie oft das geschickt wird hängt vom Client ab - oft nur bei Werteänderung

wenn man um 18 Uhr was schickt, der Cerbo um 17:30 warum auch immer einen Reboot macht sieht er das Topic nicht

Es gibt dann aber auch noch so Dinge wie die Retain-Flag

hallo,

man kann bei jedem mqtt-server nicht nur ein topic abonieren, man kann auch den wert dazu anfordern! ansonsten bekommt man nur daten, wenn der wert auf dem server neu geschrieben wird, eine aenderung des wertes ist dabei nicht noetig!

deshalb empfehle ich immer, bei externer aenderung der konfiguration, die zum entleeren des akkus oder ausfall des systems kommen kann, mit einer sicherheitsroutine zu ueberwachen.

abgesehen davon, die cerbos, die ich installiere, haengen immer per lan und wlan im netz, wenn das moeglich ist. wenn dann eine verbindung ausfaellt, nutzt der cerbo automatisch die andere. da sich die ip des mqtt-server auf meinem m1 aber nicht aendert, kann der cerbo auch ueber beide schnittstellen auf den server zugreifen. im umgekehrten fall muesste ich pruefen, mit welcher ip der cerbo erreichbar ist, um auf den ausfall einer schnittstelle reagieren zu koennen.

und wenn ich von node-red aus daten an einen mqtt-server sende, kann ich die verbindung auch nicht ueberwachen.

tschuess

meines Wissens nach geht genau das nicht - aber ich lasse mich gerne eines Besseren belehren?

Mein Verständnis von MQTT: der Broker bekommt Nachrichten - die “Kunden” die diese abonniert haben bekommen sie entsprechend zugestellt

wen am 20.3. eine Nachricht verschickt wurde, z.B. Aussentemperatur 10° - ein neu hinzugekommener Client kann nicht 2 Tage später die Aussentemperatur abfragen - er muss warten bis diese erneut gesendet und damit ihm zugestellt wird

hallo,

genau darin liegt dein fehler. es gibt mqtt-server, die senden beim abonieren eines topic automatisch die werte, die zuletzt geschrieben wurden. so war das auch beim alten mqtt-server im venus-os.

du kannst ueber den keep-alive alle gespeicherten daten anfordern, wenn man einen leerstring sendet.

flows (8).zip (1,3 KB)

mit diesem flow kannst du ein topic abonieren und gleichzeitig ueberwachen und wenn nicht rechtzeitig ein neuer wert kommt, wird der vom mqtt-server angefordert!

allerdings wenn, in deinem beispiel, der mqtt-server zwischendurch neu gestartet wird, dann waere natuerlich auch kein wert mehr da, den man anfordern koennte!

aber alle daten, die der mqtt-server vorhaelt, koennen jederzeit von jedem client angefordert werden, entweder einzeln, komplett oder auch blockweise.

ansonsten wuerde das ja keinen sinn machen, wenn der client fehlende daten, die auf dem server existieren, nicht anfordern koennte.

der mqtt-server ist ja nichts weiter, als eine datenbank, die allerdings fluechtig ist, wenn er neu gestartet wird!

tschuess

nein, da liegt Dein Verständnisproblem

Es gibt da keine Server die irgendwas senden - sondern es gibt auch für MQTT Normen

Das Ganze ist zum Glück etwas weiter durchdacht

Denke Du gehst von Messages mit retain-Flag aus? das ist nicht der Standard bei MQTT

hallo,

ich arbeite nur mit dem mqtt-server von victron und mosquitto unter linux und ich kann dir nur sagen, was ich in der anleitung gefunden habe und was ich selbst mache. und beim victron mqtt-server kann man alle gespeicherten daten nun mal einzeln abfragen und von meinem eigenen mqtt-server brauche ich sowieso nur daten, die regelmaessig geschrieben werden!

und der alte mqtt-server hat automatisch alle topics beim abonieren gesendet, der neue macht das nicht mehr. deshalb musste ich ja meine programme anpassen!

und damit du von einem mqtt-server daten bekommst, muss es auch einen client geben der daten sendet, sonst hat der naemlich keine daten, die man senden oder abfragen koennte.

aber du kannst das machen, wie du willst. auf jeden fall kann man mit node-red auch die daten mehrere bms zusammenfassen um ein neues bms zu emulieren.

und mit mqtt habe ich mich auch nur soweit befasst, dass alles, was ich brauche auch funktioniert! alles andere ist mir ehrlich gesagt egal, solange ich es nicht brauche!

mehr als beispiele zum ausprobieren oder benutzen, kann ich dir auch nicht geben.

tschuess