Seite 1 von 1

[V 3.5.1] Zyklisch Fixwerte schreiben, wenn Logik erfüllt

Verfasst: Mi Jul 19, 2023 8:43 pm
von Saarlaender
Servus Leute,

ich bin noch nicht ganz warm geworden mit der LogikEngine und möchte hier mal das konkrete Vorhaben posten in der Hoffnung dass mir jemand auf die Sprünge helfen kann.

Zeitlich gesehen wärs vermutlich doch schneller, wenn ich einfach den Umweg über OpenHab und den KNX-Bus gehe ... aber ich wills ja gerne "richtig" machen und eigentlich auch auf kurz oder lang von OpenHab weg.


Also, mein SMA Sunny Island kann via Modbus gesteuert werden. Konkret will ich steuern, ob und inwiefern er die Batterie laden darf oder nicht. Ab Werk lädt er nämlich schnellstmöglich auf 100% und das möchte ich auf "spätestmöglich" ändern - in späteren Erweiterungen mit variablen Schwellen und dazu sollten die Schwellen Wetter- bzw. Prognoseabhängig sein.
Falls sich jemand mit SMA auskennt: ich bin mit SMA in Kontakt und es gibt - zumindest ohne Wirkleistungsbegrenzung - derzeit keine Möglichkeit das mit dem SHM2.0 oÄ zu realisieren.

Zu dieser Steuerung des Ladevorgangs muss ich alle 10 Sekunden 4 Modbus-Register schreiben. Was genau geschrieben wird, steht fest und muss weder einstellbar noch einsehbar sein - wobei das bei mir derzeit sowieso nur via OpenHab und damit über den Umweg KNX ginge.


Meine Idee war jetzt mal einfach formuliert wie folgt

2 Variablen anlegen, die testweise fix beschrieben werden - in erster Erweiterung aber auf die Visu kommen (derzeit OpenHab):
#1: Eigene Lade-Automatik aktiv (true = meine Logik regelt | false = SMA regelt)
#2: Laden gesperrt (true = Batterie wird nicht geladen | false = Batterie wird geladen)

Logik:
Wenn "Eigene Lade-Automatik aktiv" dann wird in Abhängigkeit von Wetter (evt. Info Wetterstation sowie aktueller PV-Ertrag) und Vorhersage (Bewölkung; geht das überhaupt mit dem Timberwolf?) die Variable "Laden gesperrt" auf true oder false gesetzt. Dabei sollen Timer wirken, damit nicht ständig hin und her geschaltet wird

Wenn "Eigene Lade-Automatik aktiv" und "Laden gesperrt", werden 4 vorher festgelegte Fixwerte via Modbus geschickt und das Laden damit gesperrt
Wenn "Eigene Lade-Automatik aktiv" = false oder "Laden gesperrt" = false, dann werden 4 andere Fixwerte via Modbus geschickt und das Laden wieder freigegeben

Das Senden erfolgt alle 10 Sekunden



Wenn ich eigene Variablen anlegen und Logik in Textform tippen könnte, wär ich denke ich schnell durch. So bin ich aber erstmal planlos.
PS: Den Workaround mit Additionsbaustein (Fixwert mit 0 Addieren) war schon ein guter Hinweis aus dem anderen Beitrag :-)

Re: Zyklisch Fixwerte schreiben, wenn Logik erfüllt

Verfasst: Mi Jul 19, 2023 8:56 pm
von gbglace
Derzeitiger Software Stand?

Re: Zyklisch Fixwerte schreiben, wenn Logik erfüllt

Verfasst: Do Jul 20, 2023 9:17 am
von Mibr85
Hallo Daniel
bitte die Forumsregeln oben im blauen Kasten beachten

Re: Zyklisch Fixwerte schreiben, wenn Logik erfüllt

Verfasst: Mo Jul 24, 2023 8:20 pm
von Saarlaender
Ich bekomm den Beitrag nicht mehr geändert?!

Timberwolf: 3.5.1

Re: [V 3.5.1] Zyklisch Fixwerte schreiben, wenn Logik erfüllt

Verfasst: Mo Jul 24, 2023 11:55 pm
von Robert_Mini
Hallo Daniel!

Deine Anforderung sollte sich auf Basis dieses Bausteins viewtopic.php?f=65&t=1894&hilit=reboot+senden#p20290 lösen lassen.
Die Eingänge als Parameter auf die 4 Werte, über 2xAND (deine 2 Bedingungen) ein Inhibit (Sperre) ansteuern und einen zyklischen Trigger für die 10s auf den Triggereingang legen.

Falls das zu knapp war, kurz melden, dann bereite ich dir ein paar Dinge genauer auf/vor.

lg
Robert

Re: [V 3.5.1] Zyklisch Fixwerte schreiben, wenn Logik erfüllt

Verfasst: Di Jul 25, 2023 9:48 am
von StefanW
Hi Daniel,
Saarlaender hat geschrieben: Mi Jul 19, 2023 8:43 pmWenn ich eigene Variablen anlegen und Logik in Textform tippen könnte, wär ich denke ich schnell durch. So bin ich aber erstmal planlos.
Ich nehme an, Du meinst mit "Textform" eigentlich eine herkömmliche Skriptsprache wie Python. Weil "Custom Logiken" kann man im Timberwolf Server auch in Textform eingeben.

Wir verstehen den Wunsch einiger Kunden nach "Logik als Script", dieser kommt voranging von denjenigen, die Softwareentwicklung betreiben. Allerdings können hier zig ineinander verschachtelte IF THEN Schleifen durchaus auch eine gewisse Unübersichtlichkeit schaffen.

Wir haben uns beim Design des Timberwolf Servers deshalb zunächst für binäre Logikbausteine entschieden, weil wir damit kompatibel zu den gängigen Logikbausteinen bei KNX sind, so dass Integratoren einen leichten Übergang haben. Zudem ist unsere Logik pfeilschnell und alles läuft parallel.

Das Design des Timberwolf Servers würde jedoch auch mehrere parallele Logikengines zulassen. Womöglich haben wir tatsächlich eines Tages auch eine zweite Engine, in der man herkömmliche Scriptsprachen benutzen kann.

Als Workaround kann man sich einfach einen Docker Container mit einer Python Umgebung (oder andere Scriptsprache) machen und installiert eine MQTT Client Lib dazu. Dann noch einen zweiten Container mit einem MQTT Broker und Du kannst wunderbar Deine Script-Logiken dort ablaufen und via MQTT mit dem Objektsystem kommunizieren lassen. Ich kenne einige Integratoren, die das so machen, insbesondere für komplexe Abläufe.

Es ist nicht so, dass dies alles mit dem Timberwolf Server nicht möglich ist. Genau dafür sind die Docker Container ja da, dass man darin die selbst geschriebene Software ablaufen lassen kann.


lg

Stefan

Re: [V 3.5.1] Zyklisch Fixwerte schreiben, wenn Logik erfüllt

Verfasst: Do Aug 03, 2023 6:02 pm
von Saarlaender
Danke, hab das Ganze mal versucht. Aktuell hänge ich an einem SINT-Datentyp. Ich schreibe 0 aus der Logik (auch schon +1 sowie -1 versucht), aber die Modbus-Sendegruppe bringt dazu nen Fehler "...keine erfolgreiche Konvertierung".

Ich pack das mal in das Modbus-Forum :-)