NEU! Datensicherung per FTP / FTPS
mit Anforderung Backup über Systemobjekt, Zeitschaltuhr und VISU
Viele Details dazu hier im Forum

Upgrade: Erweiterte Prüfung von Custom Logik Code
Upgrade: Navigation im Menübaum über Suche mit CTRL-F
Upgrade: Dekodierung für 17 weitere DPT im Busmonitor - mit Farbpunkt bei RGB
Upgrade: Weitere 31 neue physikalische Einheiten und verbesserte Darstellung / Auswahl
Upgrade: Zusätzliche Gestaltungsmöglichkeiten für VISU Widgets auf der Detailseite

Jetzt in der Insider Version 7 zur 4.5 - für alle Mitglieder des Insider Clubs installierbar
Alle Infos zum Update im Timberwolf Wiki

von KI erstellten Müllerinnerungskalender mit KI geschriebener Erklärung

Informationen und Diskussionen über Logik-Engine und Logik-Editor
Forumsregeln
  • Denke bitte an aussagekräftige Titel und gebe dort auch die [Firmware] an. Wenn ETS oder CometVisu beteiligt sind, dann auch deren Version
  • Bitte mache vollständige Angaben zu Deinem Server, dessen ID und dem Online-Status in Deiner Signatur. Hilfreich ist oft auch die Beschreibung der angeschlossener Hardware sowie die verwendeten Protokolle
  • Beschreibe Dein Projekt und Dein Problem bitte vollständig. Achte bitte darauf, dass auf Screenshots die Statusleiste sichtbar ist
  • Bitte sei stets freundlich und wohlwollend, bleibe beim Thema und unterschreibe mit deinem Vornamen. Bitte lese alle Regeln, die Du hier findest: https://wiki.timberwolf.io/Forenregeln
Antworten

Ersteller
eib-eg
Reactions:
Beiträge: 598
Registriert: Fr Sep 14, 2018 5:03 pm
Hat sich bedankt: 1591 Mal
Danksagung erhalten: 379 Mal

von KI erstellten Müllerinnerungskalender mit KI geschriebener Erklärung

#1

Beitrag von eib-eg »

Hallo allerseits

es ist faszinierend wie mein promt aktuel funktioniert mit der version 4.60.0
in diesem folgetext hatte ich nur die KI gefragt ob sie mir jeden Schritt der logik erklären kann
sorry für diejenigen die KI Texte vermeiden zu lesen
durch diese erklärung lerne ich auch dazu

also wer die erklärung lesen will bitte lesen
unten ist die logik mit eingefügt
ab jetzt nur noch KI Text
_________________________________________________________



Ich werde es in zwei Teile zerlegen:

Woher die Logik Zeit und Datum kennt – Das ist die fundamentale Basis.

Eine detaillierte Schritt-für-Schritt-Analyse des Codes – Wir gehen Zeile für Zeile durch die "Denkweise" der Logik.

Teil 1: Die fundamentale Frage - Woher kennt die Logik Zeit und Datum?

Das ist das Kernprinzip des Timberwolf Servers und viel einfacher, als man denkt.

Die Logik selbst ist "dumm" – sie weiß weder, wie spät es ist, noch welcher Tag heute ist.

Stattdessen agiert sie wie ein Büroangestellter, der auf Anweisungen wartet. Die eigentliche Intelligenz für das Timing liegt in spezialisierten Modulen, die direkt mit dem Betriebssystem des Timberwolf Servers kommunizieren.

Die Systemuhr des Timberwolf Servers: Der Server selbst hat eine interne Uhr, genau wie Ihr Computer. Diese Uhr wird im Normalfall über das Internet mit hochpräzisen Zeitservern (via NTP) synchronisiert. Der Server weiß also immer ganz genau, welche Sekunde, Minute, Stunde, welcher Tag, Monat und welches Jahr gerade ist. Er kennt auch seine Zeitzone (z.B. Berlin/Europa).

Das Cron-Modul: Der Wecker-Dienst: Das Cron-Modul ist Ihre direkte Verbindung zu dieser Systemuhr. Man kann es sich wie einen Wecker-Dienst vorstellen. Wenn Sie ein Cron-Modul in Ihrer Logik verwenden, sagen Sie dem Server-Betriebssystem:

"Liebes Betriebssystem, hier ist ein Wecker-Auftrag ("0 20 * * 4"). Bitte wecke meine Logik genau dann auf, wenn die von dir verwaltete Systemzeit auf diesen Zeitpunkt trifft. Schick ihr dann einen kurzen Impuls."

Die Logik selbst rechnet also nicht mit Zeiten. Sie wird einfach nur zu einem bestimmten Zeitpunkt vom System "angestoßen" (getriggert), weil das Cron-Modul diesen Anstoß für sie beim System bestellt hat.

Zusammengefasst: Die Logik bekommt ihre Zeitinformation nicht aktiv, sondern sie wird passiv zur richtigen Zeit vom System aufgeweckt.
Teil 2: Detaillierte Code-Analyse des "Mülltonnen-Agenten"

Stellen wir uns vor, die Logik ist eine kleine Fabrik. Wir gehen jetzt durch jede Produktionshalle (Module) und schauen uns jeden Arbeitsschritt an.
Die Zutatenliste (Level-Block)

Hier deklarieren wir alle Variablen, die wir brauchen – unsere "Zutaten" und "Lagerplätze".

P_... (Parameter): Das sind die von außen einstellbaren Schrauben. Hier legen Sie fest, wann abgeholt wird ($P_Abholtag_Wochentag) und was in der Nachricht stehen soll.

Lgc_... (Logik-Zwischenschritte): Das sind unsere internen Notizzettel und Zwischenprodukte. Sie existieren nur während eines einzigen Durchlaufs.

Konst_... (Konstanten): Das sind feste, unveränderliche Werte wie der vordere Teil des Cron-Strings oder die Zahl 6.

O_... (Output): Unser "Schaufenster", um ein Ergebnis (den fertigen Cron-String) nach außen sichtbar zu machen.

Die Produktionsstraße (Module-Block)

Die Logik wird bei jeder Änderung eines Input-Parameters einmal komplett von oben nach unten durchlaufen. Nehmen wir an, Sie haben als Abholtag Freitag (Wert 5) eingestellt. Das passiert jetzt Schritt für Schritt:

Schritt 1: Erinnerungstag berechnen
Generated json


[ "Polynomial", "$P_Abholtag_Wochentag", "$Lgc_Erinnerungstag_Int_Roh", [ -1, 1 ] ]



IGNORE_WHEN_COPYING_START
Use code with caution. Json
IGNORE_WHEN_COPYING_END

Was passiert? Das Polynomial-Modul rechnet Y = A0 + A1*X. Mit A0 = -1 und A1 = 1 wird daraus Y = X - 1.

Im Klartext: Es nimmt den Abholtag (5) und zieht 1 ab.

Ergebnis: In der Variable $Lgc_Erinnerungstag_Int_Roh steht jetzt der Wert 4 (Donnerstag).

Schritt 2 & 3: Der Grenzfall "Sonntag"
Generated json


[ "Limiter", "$Lgc_Erinnerungstag_Int_Roh", 0, "$Lgc_Is_Sonntag_Abholung", [ -1, -1 ] ],
[ "Multiplexer", [ "$Lgc_Erinnerungstag_Int_Roh", "$Konst_Sechs_Int" ], "$Lgc_Erinnerungstag_Int_Final", "$Lgc_Is_Sonntag_Abholung" ]



IGNORE_WHEN_COPYING_START
Use code with caution. Json
IGNORE_WHEN_COPYING_END

Was passiert? Was wäre, wenn der Abholtag Sonntag (0) wäre? Schritt 1 würde -1 ergeben, was kein gültiger Wochentag ist. Diese beiden Zeilen fangen das ab.

Der Limiter prüft, ob das Ergebnis aus Schritt 1 exakt -1 ist. Nur dann wird $Lgc_Is_Sonntag_Abholung zu true.

Der Multiplexer ist eine Weiche. Wenn $Lgc_Is_Sonntag_Abholung true ist, wählt er den Wert 6 (Samstag). Ansonsten nimmt er einfach den normalen Wert (4).

Im Klartext: Wenn die Abholung am Sonntag ist, wird der Erinnerungstag zu Samstag. In unserem Fall (Abholung Freitag) passiert hier nichts.

Ergebnis: In $Lgc_Erinnerungstag_Int_Final steht weiterhin die 4.

Schritt 4: Zahl in Text umwandeln
Generated json


[ "Printf", "$Lgc_Erinnerungstag_Int_Final", "$Konst_Int_to_String_Format", "$Lgc_Erinnerungstag_Str" ]



IGNORE_WHEN_COPYING_START
Use code with caution. Json
IGNORE_WHEN_COPYING_END

Was passiert? Das Printf-Modul ist ein Formatierer. Es nimmt die Zahl 4 und wandelt sie in den Text "4" um.

Warum? Weil der nächste Schritt, das Zusammenfügen von Text, nur mit Text funktioniert. Man kann keine Zahl an einen Text "ankleben".

Ergebnis: In $Lgc_Erinnerungstag_Str steht jetzt der Text "4".

Schritt 5: Den finalen Befehl zusammenbauen
Generated json


[ "Concat", [ "$Konst_Cron_Prefix", "$Lgc_Erinnerungstag_Str" ], "$Lgc_Cron_String_Final" ]



IGNORE_WHEN_COPYING_START
Use code with caution. Json
IGNORE_WHEN_COPYING_END

Was passiert? Das Concat-Modul klebt Texte aneinander.

Im Klartext: Es nimmt "0 20 * * " (unser Präfix) und klebt "4" (unseren Erinnerungstag) dahinter.

Ergebnis: In $Lgc_Cron_String_Final steht jetzt der vollständige, gültige Cron-Befehl: "0 20 * * 4".

Schritt 6: Den Wecker beim System stellen
Generated json


[ "Cron", "$Konst_True", "$Lgc_Sende_Impuls", 0, "$Lgc_Cron_String_Final" ]



IGNORE_WHEN_COPYING_START
Use code with caution. Json
IGNORE_WHEN_COPYING_END

Was passiert? Das ist der magische Moment. Das Cron-Modul nimmt den gerade erstellten String "0 20 * * 4" und registriert damit den "Wecker" bei der Systemuhr des Timberwolf Servers.

Ergebnis: Ab jetzt wartet das System darauf, dass es Donnerstag, 20:00 Uhr wird. Wenn es so weit ist, wird die Variable $Lgc_Sende_Impuls für einen einzigen Logik-Zyklus auf true gesetzt.

Schritt 7: Die Nachricht versenden
Generated json


[ "SendToSimple", "$Lgc_Sende_Impuls", "$P_Erinnerungs_Kanal", "$P_Erinnerungs_Titel", "$P_Erinnerungs_Nachricht", 0, 0 ]



IGNORE_WHEN_COPYING_START
Use code with caution. Json
IGNORE_WHEN_COPYING_END

Was passiert? Dieses Modul schläft die ganze Zeit. Es wird nur aktiv, wenn sein erster Parameter ($Lgc_Sende_Impuls) true ist.

Im Klartext: Wenn der Wecker aus Schritt 6 klingelt, wacht dieses Modul auf und verschickt die von Ihnen konfigurierte Nachricht.

Schritt 8: Das Ergebnis anzeigen (Debugging)
Generated json


[ "Multiplexer", [ "$Konst_Empty_String", "$Lgc_Cron_String_Final" ], "$O_Debug_Cron_String", "$Konst_True" ]



IGNORE_WHEN_COPYING_START
Use code with caution. Json
IGNORE_WHEN_COPYING_END

Was passiert? Dies ist ein einfaches "Kopier-Pattern". Es kopiert den Wert aus $Lgc_Cron_String_Final in die Ausgangs-Variable $O_Debug_Cron_String.

Warum? Damit Sie im Logikblatt des Timberwolf Servers immer sehen können, welchen Cron-String die Logik gerade aktiv verwendet. Das ist extrem hilfreich zur Fehlersuche.

Das ist die gesamte Magie. Die Logik ist eine flexible "Befehls-Bau-Maschine", die bei jeder Änderung ihrer Parameter einen neuen, passenden Wecker beim System anmeldet.



{
"Level": [
[ "$P_Abholtag_Wochentag", "integer", 5 ],
[ "$P_Erinnerungs_Titel", "string,64", "Müllabfuhr" ],
[ "$P_Erinnerungs_Nachricht", "string,256", "Morgen wird die Mülltonne abgeholt. Bitte jetzt rausstellen." ],
[ "$P_Erinnerungs_Kanal", "integer", 1 ],
[ "$Lgc_Erinnerungstag_Int_Roh", "integer", 0 ],
[ "$Lgc_Erinnerungstag_Int_Final", "integer", 0 ],
[ "$Lgc_Erinnerungstag_Str", "string,2", "" ],
[ "$Lgc_Cron_String_Final", "string,32", "" ],
[ "$Lgc_Sende_Impuls", "bool", false ],
[ "$Lgc_Is_Sonntag_Abholung", "bool", false ],
[ "$Konst_Cron_Prefix", "string,32", "0 20 * * " ],
[ "$Konst_Int_To_String_Format", "string,8", "%d" ],
[ "$Konst_Sechs_Int", "integer", 6 ],
[ "$Konst_True", "bool", true ],
[ "$Konst_Empty_String", "string,1", "" ],
[ "$O_Debug_Cron_String", "string,32", "" ]
],
"Module": [
[ "Polynomial", "$P_Abholtag_Wochentag", "$Lgc_Erinnerungstag_Int_Roh", [ -1, 1 ] ],
[ "Limiter", "$Lgc_Erinnerungstag_Int_Roh", 0, "$Lgc_Is_Sonntag_Abholung", [ -1, -1 ] ],
[ "Multiplexer", [ "$Lgc_Erinnerungstag_Int_Roh", "$Konst_Sechs_Int" ], "$Lgc_Erinnerungstag_Int_Final", "$Lgc_Is_Sonntag_Abholung" ],
[ "Printf", "$Lgc_Erinnerungstag_Int_Final", "$Konst_Int_To_String_Format", "$Lgc_Erinnerungstag_Str" ],
[ "Concat", [ "$Konst_Cron_Prefix", "$Lgc_Erinnerungstag_Str" ], "$Lgc_Cron_String_Final" ],
[ "Cron", "$Konst_True", "$Lgc_Sende_Impuls", 0, "$Lgc_Cron_String_Final" ],
[ "SendToSimple", "$Lgc_Sende_Impuls", "$P_Erinnerungs_Kanal", "$P_Erinnerungs_Titel", "$P_Erinnerungs_Nachricht", 0, 0 ],
[ "Multiplexer", [ "$Konst_Empty_String", "$Lgc_Cron_String_Final" ], "$O_Debug_Cron_String", "$Konst_True" ]
],
"Input": [
[ "Abholtag (0=So, 1=Mo... 5=Fr, 6=Sa)", "Wochentag, an dem die Mülltonne abgeholt wird.", "$P_Abholtag_Wochentag", "c" ],
[ "Titel der Erinnerung", "Titel für die Push-Benachrichtigung", "$P_Erinnerungs_Titel", "c" ],
[ "Text der Erinnerung", "Nachrichtentext für die Push-Benachrichtigung", "$P_Erinnerungs_Nachricht", "c" ],
[ "Kanal der Erinnerung", "Kanal für die Benachrichtigung (z.B. 1 für Push)", "$P_Erinnerungs_Kanal", "c" ]
],
"Output": [
[ "DEBUG: Generierter Cron String", "Zeigt den aktuell aktiven Cron-String an. Hilfreich zur Überprüfung.", "$O_Debug_Cron_String", "c" ]
]
}
TW 2600_99 seit 1.1.2018 / VPN zu

dali
Reactions:
Beiträge: 90
Registriert: Di Feb 04, 2020 12:23 pm
Wohnort: Österreich
Hat sich bedankt: 183 Mal
Danksagung erhalten: 49 Mal

#2

Beitrag von dali »

Guten Morgen,
welche KI ist das?

Danke und LG,
Dali
TWS 3500XL ID:1052, VPN offen, Reboot erlaubt

Ersteller
eib-eg
Reactions:
Beiträge: 598
Registriert: Fr Sep 14, 2018 5:03 pm
Hat sich bedankt: 1591 Mal
Danksagung erhalten: 379 Mal

#3

Beitrag von eib-eg »

TW 2600_99 seit 1.1.2018 / VPN zu

Ersteller
eib-eg
Reactions:
Beiträge: 598
Registriert: Fr Sep 14, 2018 5:03 pm
Hat sich bedankt: 1591 Mal
Danksagung erhalten: 379 Mal

#4

Beitrag von eib-eg »

Wenn einer eine Hilfe hinsichtlich Logik braucht kann ich mal anbieten eine eigene Seite aufmachen mit Beschreibung was die Logik machen soll welche sensorische dafür bereitgestellt wird und was als Ergebnis rauskommen soll
Ich möchte gerne meinen promt testen
Bitte dann einen Link auf diesen Beitrag das ich es dann mache.

Mehr kann ich aktuell nicht anbieten als Hilfestellung für diejenigen die Schwierigkeiten haben mit der Logik
TW 2600_99 seit 1.1.2018 / VPN zu
Antworten

Zurück zu „Logikengine & Logik-Editor“