23.1: Ich verstehe die Logikengine nicht

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

blaubaerli
Reactions:
Beiträge: 2694
Registriert: Sa Sep 15, 2018 10:26 am
Wohnort: Kerpen
Hat sich bedankt: 1014 Mal
Danksagung erhalten: 807 Mal

#11

Beitrag von blaubaerli »

Hi Diego,

ggf. schafft ein zusätzlicher Timer auf der Eingangsseite schon Abhilfe. Damit würde die Logik zusätzlich zyklisch getriggert.

Das sollte er dann mit den Werten machen die zum jeweiligen Zeitpunkt am Eingang anliegen. Hast du den Doktormodus verlassen und keine Werte mehr überschrieben, sollte dann der Ausgang geradegerückt werden.

Gruß
Jens
timberwolf168(2600er)VPN offenReboot nach Vereinbarung
timberwolf1699(3500XL)VPN offenReboot jederzeit
wiregate1250
Bitte WIKI lesen.

Robert_Mini
Reactions:
Beiträge: 3907
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1275 Mal
Danksagung erhalten: 2220 Mal

#12

Beitrag von Robert_Mini »

Hallo zusammen!

Ich denke hier liegt ein genereller Irrtum vor.
Die Ausführung der Logikzelle wir entweder angestoßen, wenn an einem Eingang eine Telegramm empfangen wird (und abhängig vom Parameter a/c/u) oder per zusätzlichem Trigger (zB wenn kein Eingang anliegt, sondern nur Ausgänge zB Astro-Logikblock).
Ein periodischer Trigger führt zwar zu einem zyklischen Senden, aber zur Berechnung werden die Werte verwendet, die zuletzt empfangen wurden.

D.h. aber, dass beim Beenden des Doctor-Modus erst eine Änderung berücksichtigt wird, wenn der zuvor überschriebene Wert wieder neu empfangen wurde.

Auch beim Ändern des Codes einer Custom-Logikzelle, werden die Eingänge wieder auf den Default gesetzt und werden erst mit dem nächsten Telegramm überschrieben. Das kann insbesondere bei Telegrammen, die nicht zyklisch gesendet werden (zB Fensterkontakte) problematisch sein.

lg
Robert
Zuletzt geändert von Robert_Mini am Mo Jun 10, 2019 7:21 pm, insgesamt 2-mal geändert.
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

Ersteller
fechter65
Reactions:
Beiträge: 240
Registriert: Mo Aug 13, 2018 10:44 am
Hat sich bedankt: 224 Mal
Danksagung erhalten: 171 Mal

#13

Beitrag von fechter65 »

Danke Robert, das leuchtet ein und ich habe es eigentlich auch so vermutet. Dementsprechend hatte ich bei meinen Tests (so glaube ich zumindest, "beweisen" kann ich es nicht) versucht, über Lesebefehle die entsprechenden GA auf den Bus zu bringen. Dies hat aber nicht immer geholfen.
Beste Grüsse
Diego
TW2600 / TW-ID: 87/ VPN offen, booten jederzeit erlaubt
TW2600 / TW-ID: 173/ VPN offen, booten nach Rücksprache
TWS3500 / TW-ID: 1170/ VPN offen, booten jederzeit erlaubt

blaubaerli
Reactions:
Beiträge: 2694
Registriert: Sa Sep 15, 2018 10:26 am
Wohnort: Kerpen
Hat sich bedankt: 1014 Mal
Danksagung erhalten: 807 Mal

#14

Beitrag von blaubaerli »

Hi Robert,

das wird sicher noch ab und an zum Thema werden. Es wäre doch eigentlicht wünschenswert, wenn der TWS, sich den letzten auf der Eingansseite erhaltenen Wert "merken" würde. Dann könnte nach Ende des Doktormodus die Logik "automatisch" mit den aktuellen Einganswerten gefeuert werden. Oder wenn automatisch nicht gewünscht, dann per Nachfrage.

Wenn die Werte natürlich noch nie angekommen sind.....

Gruß
Jens

PS: Ggf. erst umsetzbar mit dem Persistenzlayer
Zuletzt geändert von blaubaerli am Mo Jun 10, 2019 7:39 pm, insgesamt 1-mal geändert.
timberwolf168(2600er)VPN offenReboot nach Vereinbarung
timberwolf1699(3500XL)VPN offenReboot jederzeit
wiregate1250
Bitte WIKI lesen.

Gecks
Reactions:
Beiträge: 106
Registriert: Mi Okt 31, 2018 12:53 am
Hat sich bedankt: 116 Mal
Danksagung erhalten: 77 Mal

#15

Beitrag von Gecks »

Gute Idee von Jens.

Das war, glaube ich, auch schon Mal im Gespräch.
Könnte sich die Logik den letzten Wert nicht aus der Grafana DB holen?
TWS 950 ID: 352, VPN offen, Reboot jederzeit

StefanW
Elaborated Networks
Elaborated Networks
Reactions:
Beiträge: 10802
Registriert: So Aug 12, 2018 9:27 am
Wohnort: Frauenneuharting
Hat sich bedankt: 5336 Mal
Danksagung erhalten: 8892 Mal
Kontaktdaten:

#16

Beitrag von StefanW »

Hallo zusammen,

ja Robert hat Recht, es wird nur Berechnet, wenn etwas neues kommt (und abhängig von den Triggereinstellungen für jeden Eingang).

Das Problem mit solchen Features, wie "selbst etwas einspeisen" ist, dass es vom hundersten zum tausendsten führt:

Den nun soll der Logikeditor die Objekte nach beenden des Doktormodus wieder erneut mit dem letzten Wert initialisieren ? Ansich kein schlechter Gedanke, aber so einfach ist das nicht, weil der letzte Wert könnte ja auch Tage oder Wochen (und einen Reboot oder Busspannungsausfall) her sein. Das wird von den Auswirkungen und Varianten dann durchaus komplex. Auch weil der letzte Wert ja vielleicht noch an weitere Objekte gehen kann, soll man dann an diese auch nochmal senden, oder nur an den entsprechenden Logikeingang? Was ist, wenn es noch nie einen im System gab, weil gerade frisch gestartet?

Daher eine Bitte: Wenn Ihr einen Wert ändert, schreibt Euch auf, welches der letzte eingespeiste Wert war, bevor ihr den mit was testweisem überschreibt.

==> Wir werden prüfen, dass wir die Darstellung optimieren, so dass man die letzten Werte vom Bus sehen kann.

lg

Stefan
Stefan Werner
Product Owner für Timberwolf Server, 1-Wire und BlitzART
Bitte WIKI lesen. Allg. Support nur im Forum. Bitte keine PN
Zu Preisen, Lizenzen, Garantie, HW-Defekt an service at elabnet dot de

Link zu Impressum und Datenschutzerklärung oben.

gbglace
Reactions:
Beiträge: 4103
Registriert: So Aug 12, 2018 10:20 am
Hat sich bedankt: 1434 Mal
Danksagung erhalten: 1923 Mal

#17

Beitrag von gbglace »

Ja ist ein klein wenig Fluch und Segen der Möglichkeit im Livesystem, an-/abgekoppelt an jedem Parameter zu testen.
Nächster Punkt wie so ein Systemverhalten schwer zu designen ist, was soll passieren wenn auf dem Bus sich während der abgekoppelten Bastelei der Eingangswert geändert hat, da ergibt dann eine manuelles Rücksetzen auch kein richtiges Ergebnis.

Einen Readrequest auf alle Eingangs-Ko bei deaktivieren des Doktormodus funzt wahrscheinlich eh nur bei 1-wire meist noch bei KNX Objekten. Da der LE ja Multitechnologie fähig ist, ist das wahrlich kein kleines Ding sauber umzusetzen.

Hat man also ne komplexe Logik mit gemischt volatilen Eingängen ist es bei längerdauernden Anpassungen ggf doch besser ne Kopie anzulegen und die am Ausgang abzukoppeln.

Ich denke das beste Vorgehen wird sich noch herausarbeiten.

Oder gleich dem Trend zum Zweitwolf folgen.
Zuletzt geändert von gbglace am Di Jun 11, 2019 5:34 am, insgesamt 1-mal geändert.
Grüße Göran
#1 Timberwolf 2600 Velvet Red TWS #225 / VPN aktiv / Reboot OK
#2 Timberwolf 2600 Organic Silver TWS #438 / VPN aktiv / Reboot OK
#PV 43,2 kWh Akku; 3x VE MP2 5000; 6,7 kWp > 18 Panele an 4x HM1500 + 1 HM800 WR; Open-DTU

StefanW
Elaborated Networks
Elaborated Networks
Reactions:
Beiträge: 10802
Registriert: So Aug 12, 2018 9:27 am
Wohnort: Frauenneuharting
Hat sich bedankt: 5336 Mal
Danksagung erhalten: 8892 Mal
Kontaktdaten:

#18

Beitrag von StefanW »

gbglace hat geschrieben: Di Jun 11, 2019 5:31 amNächster Punkt wie so ein Systemverhalten schwer zu designen ist, was soll passieren wenn auf dem Bus sich während der abgekoppelten Bastelei der Eingangswert geändert hat, da ergibt dann eine manuelles Rücksetzen auch kein richtiges Ergebnis.
Richtig. und noch schlimmer wird es, wenn inzwischen mehrere Zustandswechsel - während der Abkoppelzeit - eingetroffen sind und es sich um einen Zähler oder irgendeine fortschaltende Logik handelt.

==> Im Moment sehe ich es so. Die Eingriffsmöglichkeiten sind ein scharfes Skalpell und damit soll nur derjenige umgehen, der dann auch weiß was er tut bzw. sich darüber im Klaren ist, wie man es wieder zurück schalten kann. Wir werden versuchen das durch verbesserte Anzeige transparenter darzustellen, aber ich fürchte, für eine vollständige Automatik wird das zu aufwändig, gerade auch in Hinsicht der verschiedenen Technologien.


Diego, ich habe den Stefan K gebeten, mal einen scharfen Blick auf diesen Thread (und den Nachbarthread) zu werfen. Womöglich haben wir auch ein Problem.

lg

Stefan
Stefan Werner
Product Owner für Timberwolf Server, 1-Wire und BlitzART
Bitte WIKI lesen. Allg. Support nur im Forum. Bitte keine PN
Zu Preisen, Lizenzen, Garantie, HW-Defekt an service at elabnet dot de

Link zu Impressum und Datenschutzerklärung oben.

S. Kolbinger
Elaborated Networks
Elaborated Networks
Reactions:
Beiträge: 588
Registriert: Mi Aug 15, 2018 11:34 am
Hat sich bedankt: 82 Mal
Danksagung erhalten: 560 Mal

#19

Beitrag von S. Kolbinger »

Hallo Diego,
fechter65 hat geschrieben: Mo Jun 10, 2019 9:31 am Dank Stefans grosszügiger Arbeit ( viewtopic.php?f=61&t=787&start=20#p8221 ) habe ich auf dem TWS-171 eine Logik eingerichtet, die grundsätzlich auch funktioniert, manchmal aber auch nicht, so auch im hier dargestellten Beispiel.
meine Arbeit mag vielleicht noch großzügig gewesen sein, aber definitiv nicht großartig :roll:
Mir ist da ein dummer Fehler unterlaufen:
Die Module werden in der Reihenfolge berechnet, wie sie angegeben sind. Es ist daher ziemlich doof von mir, Zwischenergebnisse zu verwenden, bevor sie berechnet werden. Im konkreten Fall habe ich im "And"-Modul das $Hell_Out verwendet, obwohl es erst im "Comparator"-Modul berechnet wurde. :angry-banghead:
Mit anderen Worten: Bei der Berechnung wurde immer der Hellikeitsvergleich des vorigen Durchlaufs verwendet.
Das führt natürlich zu komischen Effekten.

Hiermit sollte es (hoffentlich) deutlich besser gehen:

Code: Alles auswählen

{
  "Input": [
    [
      "Praesenz",
      "Praesenz",
      "$VAR<Praesenz!>",
      "c"
    ],
    [
      "Sperrung",
      "Sperre",
      "$Sperrung",
      "c"
    ],
    [
      "Helligkeit",
      "Helligkeitswert",
      "$Helligkeit",
      "c"
    ],
    [
      "Lux_dunkel",
      "Unterer Schwellwert",
      "$LichtUntergrenze",
      "c"
    ],
    [
      "Lux_hell",
      "Oberer Schwellwert",
      "$LichtObergrenze",
      "c"
    ],
    [
      "Inhibit",
      "INHIBIT",
      "$VAR<Inhibit?>",
      "u"
    ]
  ],
  "Module": [
    [
      "Break",
      [
        "$VAR<Inhibit?>"
      ]
    ],
    [
      "Or",
      [
        "$VAR<Praesenz!>"
      ],
      "$Praesenz_Out"
    ],
    [
      "Comparator",
      "$Helligkeit",
      "$Hell_Out",
      [
        "$LichtUntergrenze",
        "$LichtObergrenze"
      ]
    ],
    [
      "And",
      [
        "$Praesenz_Out",
        "-$Sperrung",
        "-$Hell_Out"
      ],
      "$Schalten"
    ]
  ],
  "Output": [
    [
      "Schalten",
      "Schalten Licht",
      "$Schalten",
      "c"
    ]
  ],
  "Level": [
    [
      "$VAR<Praesenz!>",
      "bool",
      false
    ],
    [
      "$Praesenz_Out",
      "bool",
      false
    ],
    [
      "$Sperrung",
      "bool",
      false
    ],
    [
      "$Helligkeit",
      "float",
      0
    ],
    [
      "$Hell_Out",
      "bool",
      false
    ],
    [
      "$LichtUntergrenze",
      "float",
      0
    ],
    [
      "$LichtObergrenze",
      "float",
      0
    ],
    [
      "$Schalten",
      "bool",
      false
    ],
    [
      "$VAR<Inhibit?>",
      "bool",
      false
    ]
  ]
}
Ich werde es auch noch im originalen Beitrag korrigieren ( viewtopic.php?f=61&t=787&start=20#p8221 )

Sorry :oops:
Gruß,
Stefan K.

Ersteller
fechter65
Reactions:
Beiträge: 240
Registriert: Mo Aug 13, 2018 10:44 am
Hat sich bedankt: 224 Mal
Danksagung erhalten: 171 Mal

#20

Beitrag von fechter65 »

Vielen Dank, Stefan. Ich schätze Deine Arbeit sehr, Du bist wirklich grosszügig mit uns.
Ich habe die Logik soeben (10.00 Uhr zuhanden des Protokolls) soeben angepasst und hoffe auf gute Ergebnisse. Seit heute 0706 hat das Licht nicht mehr geschalten, obwohl der obere Grenzwert mehrfach unterschritten wurde.

Für das Auslösen der Logik habe ich um 10.04.58 in der ETS einen Read-Request auf den Präsenzmelder abgesetzen, damit wurde das Licht in der neuen Logik eingeschaltet.

Btw: Es wäre angenehm, wenn wir direkt aus dem TWS einen KNX-Read-Request abschicken könnten und zu diesem Zweck nicht immer die ETS starten müssten (Feature Request).

Bearbeitet: Kleine Präzisierung im 2. Absatz
Zuletzt geändert von fechter65 am Di Jun 11, 2019 10:09 am, insgesamt 1-mal geändert.
TW2600 / TW-ID: 87/ VPN offen, booten jederzeit erlaubt
TW2600 / TW-ID: 173/ VPN offen, booten nach Rücksprache
TWS3500 / TW-ID: 1170/ VPN offen, booten jederzeit erlaubt
Antworten

Zurück zu „Logikengine & Logik-Editor“