Seite 1 von 2

Modul "Triggered"

Verfasst: Mi Feb 26, 2020 9:19 pm
von S. Kolbinger
Es gibt ein neues Modul für die Logic-Engine: Das "Triggered"-Modul mit dem sich erkennen lässt, welcher Eingang die Logik getriggert hat.

Die Syntax für die Trigger-Erkennung sieht folgendermassen aus:
[ "Triggered", "$Input", "$Touched" ]
    "Triggered" :  Modulkennung
    "$Input":      Referenz auf einen Level der mit einem Eingang verbunden ist
    "$Touched":    Referenz auf einen boolschen Level

Der Trigger-Erkennung funktioniert folgendermaßen:
Der Status des "$Input"-Levels wird überprüft, ob er beim aktellen Durchlauf dieser Logik bereits einmal "angefasst" wurde.
Ist das der Fall wird "$Touched" auf true gesetzt, anderfalls auf false

Wenn ein Ereignis an einem Eingang die Logik triggert, bekommt der mit dem Eingang verbundene Level vorher das "Touched"-Flag gesetzt.
Somit lässt sich einfach abfragen, ob dieser Eingang die Logik ausgelöst hat.

Achtung:
Wird ein Level intern "angefasst", z.B. durch ein vorheriges Modul beschrieben, wird ebenfalls das "Touched"-Flag gesetzt. Will man sicher nur auf "Eingang triggered" testen, muss dieser Test möglichst vor allen anderen Modulen stehen, die den Level verändern können.

Das Modul ist bereits in der aktuellen DEV-Version verfügbar. Viel Spaß beim ausprobieren :handgestures-thumbupright:

Re: Modul "Triggered"

Verfasst: Mi Feb 26, 2020 9:25 pm
von Robert_Mini
Sehr cool und schöne Umsetzung!

DANKE!
Robert

PS: Schön, dass du mal wieder hier aktiv postest!

Re: Modul "Triggered"

Verfasst: Mi Feb 26, 2020 9:30 pm
von S. Kolbinger
@Robert_Mini
ich muss doch unseren besten Custom-Logik-Experten :bow-yellow: so gut es geht unterstützen.

Voll krass Respekt, was du alles aus den Bausteinen rausholst. :handgestures-thumbupright:

Re: Modul "Triggered"

Verfasst: Mi Feb 26, 2020 9:36 pm
von Robert_Mini
Danke für die Blumen!
Robert

Re: Modul "Triggered"

Verfasst: Mi Feb 26, 2020 9:50 pm
von Robert_Mini
Hallo Stefan!

Ich habe noch ein größeres Problem mit einem Timer mit meinem Impuls => Leistungsmessung.
Darf ich dazu morgen wiedermal eine Frage hochholen?

Robert

Re: Modul "Triggered"

Verfasst: Sa Mär 14, 2020 1:22 am
von Robosoc
@S. Kolbinger Ich habe versucht das Modul in der V1.6 zu verwenden. Es gibt auch keine Fehlermeldung, der Code wird akzeptiert. Aber die folgende Logik wird nie ausgeführt. Es scheint mir, als würde ich immer in den "Break" reinlaufen.

Betrifft die ersten zwei Module:

Code: Alles auswählen

["Triggered", "$Grenz_1w", "$Inhibit_1w"],
["Break", ["$Inhibit_1w"]],
Wenn man die Eingänge in der Dok-Grafana Ansicht anschaut, scheint es mir so zu sein, dass jede Veränderung auf jedem Eingang den Ausgang vom Modul "triggered" auf true setzt und nicht nur dann, wenn der Eingang $Grenz_1w die Logik tatsächlich triggered.

Code: Alles auswählen

/**
* Vorlaufregler-Freigabe
*/

{
  "Input":[
    ["HKV-Schalter","Aktiviert oder Deaktiviert den HKV","$HKV_SW_In","c"],
    ["Heizbedarf","Ist Heizbedarf im Bereich des HKV vorhanden?","$Heizbedarf","a"],
    ["Grenz_1w","true bei Überschreitung des eingestellten Parameter (z.B. 37°)","$Grenz_1w","c"],
    ["Grenz_Fernfühler","true bei Überschreitung des eingestellten Parameter (z.B. 40°) ","$Grenz_KNX","c"],
    ["Stellwert_Grenzschalter Obergrenze","true bei Überschreitung, veranlasst eine Fahrt auf 0% um das Ventil zurückzusetzen (sollte das Ventil die Position verloren haben)","$Stell_max","c"],
    ["Stellwert_Grenzschalter Untergrenze","true bei Unterschreitung, veranlasst das abschalten der Heizpumpe, wenn kein Bedarf ist","$Stell_min","c"],
    ["Timer","Verzögerungszeit der Hitzeschutzdeaktivierung","$timer","u"]
  ],
  "Output":[
    ["HKV-Aktiv","Aktiviert oder Deaktiviert den HKV","$HKV_SW_Out","a"],
    ["HKV-Pumpe","Aktiviert oder Deaktiviert die HKV-Pumpe","$HKV_Pump_Out","a"],
    ["Stellwert_Zwangs_Reset","true wenn Stellwert auf 0% gesetzt werden soll","$Stell_SW_Out","c"]
  ],
  "Level":[
    ["$Blocker","bool",false],
    ["$Hitzeschutz","bool",false],
    ["$HKV_SW_In","bool",true],
    ["$Heizbedarf","bool",false],
    ["$Grenz_1w","bool",false],
    ["$Grenz_KNX","bool",false],
    ["$Inhibit_1w","bool",false],
    ["$Inhibit_KNX","bool",false],
    ["$dummy_1w","bool",false],
    ["$dummy_KNX","bool",false],
    ["$timer","integer",30],
    ["$Stell_max","bool",false],
    ["$Stell_min","bool",false],
    ["$HKV_SW_Out","bool",false],
    ["$HKV_Pump_Out","bool",false],
    ["$Stell_SW_Out","bool",false],
    ["$const_true","bool",true]
  ],
  "Module":[
    // vermeidung von unnötigen triggern bei Temperaturänderungen: Abbruch, wenn durch Grenzwert 1wire getriggert, aber dieser keine steigende Flanke hat
    ["Triggered", "$Grenz_1w", "$Inhibit_1w"],
    //["Latch","$const_true","$dummy_1w","$Grenz_1w",1],
    //["And" , ["-$dummy_1w" , "$Inhibit_1w"], "$Inhibit_1w"],
    ["Break", ["$Inhibit_1w"]],
    // vermeidung von unnötigen triggern bei Temperaturänderungen: Abbruch, wenn durch Grenzwert Fernfühler KNX getriggert, aber dieser keine steigende Flanke hat
    //["Triggered", "$Grenz_KNX", "$Inhibit_KNX" ],
    //["Latch","$const_true","$dummy_KNX","$Grenz_KNX",1],
    //["And" , ["-$dummy_KNX" , "$Inhibit_KNX"], "$Inhibit_KNX"],
    //["Break", ["$Inhibit_KNX"]],
    // eigentliche Logik
    ["Or" , ["$Grenz_1w" , "$Grenz_KNX", "$Stell_max"], "$Hitzeschutz"],
    ["Or" , ["$Hitzeschutz" , "-$HKV_SW_In", "-$Heizbedarf"], "$Stell_SW_Out"],
    ["Monoflop","$Hitzeschutz",0,"$Blocker","$timer",2],
    ["Or" , ["-$Hitzeschutz" , "$Blocker"], "-$Hitzeschutz"],
    ["And" , ["-$Hitzeschutz" , "$HKV_SW_In", "$Heizbedarf"], "$HKV_SW_Out"],
    ["And" , ["-$Hitzeschutz" , "$HKV_SW_In", "$Heizbedarf", "-$Stell_min"], "$HKV_Pump_Out"]
  ]
}
Habe einige Module zu Beginn durch Auskommentieren deaktiviert, damit der Code zunächst erstmal nur den wesentlichen Teil testet. Deaktivierst Du zusätzlich noch die beiden ersten Module, funktioniert der Code, wie gewünscht. Die Logik wird dann aber bei jeder Temperaturänderung auf den Eingängen Grenz_1w und Grenz_KNX ( versehen mit Eingangsfunktion "Schwellwert über") getriggert, was bei mir in diesem Fall sehr häufig ist und das will ich mit "triggered" unterbinden...

Re: Modul "Triggered"

Verfasst: Sa Mär 14, 2020 7:46 pm
von S. Kolbinger
Hallo Sven,

danke für die Rückmeldung.
Ich fürchte, da hast du einen echten Bug :character-bowser: entdeckt.

Leider wird bei Abbruch mit "Break" das Triggered-Flag nicht korrekt zurück gesetzt und schlägt beim nächsten Trigger wieder zu :roll:
Das habe ich bei meinen Tests leider übersehen. Sorry.

FINR

Re: Modul "Triggered"

Verfasst: Sa Mär 14, 2020 9:21 pm
von Robosoc
Alles klar, kein Problem. Habe es jetzt durch eine vorgeschaltete Logikzelle gelöst und Trigger dann mit c.darauf war ich dummerweise vorher nicht gekommen und habe extra deshalb von meinem Vorhaben abgewichen nur noch auf Hauptversionen zu setzen...der Rest ist Geschichte😂

Meinst Du Du wirst es in der offiziellen 1.6 gelöst haben? Habe es so in die K.B. Geschrieben in Abschnitt 4.6.6...sonst nehme ich es wieder raus.

Re: Modul "Triggered"

Verfasst: So Mär 15, 2020 12:30 am
von StefanW
Robosoc hat geschrieben: Sa Mär 14, 2020 9:21 pmMeinst Du Du wirst es in der offiziellen 1.6 gelöst haben?
Next Release wird erstmal "V 1.6.0 Insider Preview 2" sein...

lg

Stefan

Re: Modul "Triggered"

Verfasst: Di Jul 14, 2020 7:50 pm
von Robert_Mini
Hallo @Robosoc!

Kannst du das Verhalten nochmal testen, ob das mit 1.6RC1 oder IP3 behoben ist?

Danke und Lg
Robert