Neue Insider Version 1 zur V 4.5 verfügbar

NEU! Dynamische Akzentfarben in der VISU per Objekt steuerbar
NEU! Seite wechseln sperren per Objekt
NEU! Neue Symbole in VISU und Logik Manager
NEU! Putzmodus im VISU Client
NEU! Umfangreich verbesserter Logik Manager


Alle Informationen hier: https://elabnet.atlassian.net/wiki/x/AYD5ng

[Frage] [V4.5 IP1] Fehlende Aussendung Cron/SendExplizit bei zweiter (manueller) Logikaktivierung

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
Benutzeravatar

Ersteller
jensgulow
Reactions:
Beiträge: 443
Registriert: Fr Apr 19, 2019 4:37 pm
Wohnort: Leipzig
Hat sich bedankt: 72 Mal
Danksagung erhalten: 201 Mal

[V4.5 IP1] Fehlende Aussendung Cron/SendExplizit bei zweiter (manueller) Logikaktivierung

#1

Beitrag von jensgulow »

Ich komme nicht weiter - habe einen Knoten im Kopf.

Folgende Logik bringe ich nicht so zum Laufen wie ich mir das denke

Folgendes soll passieren:

Am $input kommt immer ein "false" an.

-> unmittelbar "false" auf $zentral_out senden (funktioniert immer)

-> mit Verzögerung (hier 2 und 4 Sekunden) sollen zwei weitere Schaltaktionen durchgeführt werden (einmal einschalten einmal ausschalten - hier beispielhaft).
-> das funktioniert beim ersten Triggern der Logik einwandfrei.
-> Triggere ich die Logik erneut durch ein "false" am Eingang dann wird nur noch ein "false" auf $zentral_out gesandt. An den beiden anderen Schaltausgängen tut sich nichts mehr....

Sieht jemand meinen Fehler (dann ich gehe davon aus, dass das Problem ca. 60 cm vorm Bildschirm sitzt) ?

Code: Alles auswählen

/**======================================================================================= 
Gute-Nacht-Szene

-> unmittelbar 0 (false) an Zentral aus (0/1/1) senden, dann

-> geschalten werden einige boolean-Verbraucher sowie die Jalousien im Wohnzimmer

-> Korrekturzeiten sind ausgehnde vom Zeitpunkt des Schaltbefehles in Sekunden angegeben 
=========================================================================================*/ 
{ 
    "Level": [ 
	// Input-Level
	["$input","bool",true],
	["$norm","integer",60],
	["$Korrektur1","int",0],
	["$Korrektur4","int",0],
	["$VAR<Inhibit?>","bool",false],

	// Interne Variablen
	["$true","bool",true],
	["$false","bool",false],
	["$input_trig","bool",false],
	["$time","int",0],
	["$utime","int",0],
	["$Cron1","string","0"],
	["$Cron4","string","0"],
	["$StringFormat","string","%d"],
	["$Null","string","0"],
	["$Stern","string","*"],
	["$Empty","string"," "],
	["$Sek1","int",0],
	["$Sek4","int",0],
	["$Min1","int",0],
	["$Min4","int",0],
	["$Hour1","int",0],
	["$Hour4","int",0],
	["$Sek1str","string","0"],
	["$Sek4str","string","0"],
	["$Min1str","string","0"],
	["$Min4str","string","0"],
	["$Hour1str","string","0"],
	["$Hour4str","string","0"],
	["$Out1","int",0],
	["$Out4","int",0],
	["$Formula","string","X1+X2"],


	// Output-Level
	["$zentral_out","bool",true],
	["$Result1","bool",false],
	["$Result4","bool",true]
	],

	"Module": [ 

	// Überprüfen, ob $input getriggert wurde
	["Triggered", "$input", "$input_trig" ],
	// Wenn getriggert und $input=0 -> dann $zentral_out auf 0 setzen
	["And" , ["$input_trig","-$input"], "-$zentral_out"],
	// 0 auf $zentral_out senden
	["SendExplicit","$zentral_out","$zentral_out",2],
    
	// Aktueller Zeitstempel
	["Localtime",0,"$time",0,0,0,0,0,0,0,0,0],

	// nur wenn getriggert wurde $time an $utime durchreichen
	["Latch","$time","$utime","$input_trig",0],


	["CalcFormula",["$utime","$Korrektur1"], "$Out1", "$Formula"],
	// Errechnete Zeit $Out1 in Bestandteile zerlegen. Wir brauchen $Min und $Hour
	["Localtime","$Out1",0,"$Sek1","$Min1","$Hour1",0,0,0,0,0,0],
	// stringify
	["Printf","$Sek1","$StringFormat", "$Sek1str"],
	["Printf","$Min1","$StringFormat", "$Min1str"],
	["Printf","$Hour1","$StringFormat", "$Hour1str"],
	// Cronstring zusammensetzen
	["Concat",["$Sek1str","$Empty","$Min1str","$Empty","$Hour1str","$Empty","$Stern","$Empty","$Stern","$Empty","$Stern"], "$Cron1"],
	// zum Zeitpunkt $Cron1 senden
	["Cron","$true","$Result1",0,"$Cron1"],
	// aber nur , wenn $Result gerade auf true gewechselt hat
	["SendExplicit","$Result1","$Result1",1], // -> sendet 1 (true)
    


	["CalcFormula",["$utime","$Korrektur4"], "$Out4", "$Formula"],
	["Localtime","$Out4",0,"$Sek4","$Min4","$Hour4",0,0,0,0,0,0],
	["Printf","$Sek4","$StringFormat", "$Sek4str"],
	["Printf","$Min4","$StringFormat", "$Min4str"],
	["Printf","$Hour4","$StringFormat", "$Hour4str"],
	["Concat",["$Sek4str","$Empty","$Min4str","$Empty","$Hour4str","$Empty","$Stern","$Empty","$Stern","$Empty","$Stern"], "$Cron4"],
	["Cron","$true","-$Result4",0,"$Cron4"],
	["SendExplicit","-$Result4","$Result4",1] // -> sendet 0 (false)

	], 

	"Input": [ 
	["INPUT","Verbunden mit 0/1/2","$input","ai"],    
	["Korrektur1 EIN","Zeit in sec (positiv oder negativ)","$Korrektur1","u"],
	["Korrektur1 AUS","Zeit in sec (positiv oder negativ)","$Korrektur4","u"],
	["Inhibit","INHIBIT","$VAR<Inhibit?>","u"]
	], 

	"Output": [ 
	["ZENTRAL AUS","Verbunden mit 0/1/1","$zentral_out","x"],
	["EINSCHALTEN 1","Schaltereignis 1","$Result1","x"],
	["AUSSCHALTEN 1","Schaltereignis 4","$Result4","x"]
	] 
} 
/**Der Schöpfer dieser Custom Logik überträgt die Nutzungsrechte gemäß der TOLL ("Timberwolf Open Logikblock License") die unter https://wrgt.news/TOLL zum Download zur Verfügung steht. */ 
Viele Grüße

Jens

_____________________________________________________________________
TWS 2600#394 , TWS 3500L#1051, VPN offen, Reboot erlaubt
Was wird genutzt? -> TWS, KNX, 1-wire, MQTT, MODBUS, Http-REST-API, IFTTT, Enocean, Amazon Alexa

ms20de
Elaborated Networks
Reactions:
Beiträge: 1171
Registriert: Sa Aug 11, 2018 9:14 pm
Hat sich bedankt: 326 Mal
Danksagung erhalten: 606 Mal

#2

Beitrag von ms20de »

Hallo Jens,

du hast au dem Schirm, dass bei SendExplicit der Dr. Modus nicht immer da anzeigt was man erwartet?
Wenn nein, dann vielleicht die Ausgänge testweise mit Zeitserien verbinden und prüfen, ob tatsächlich nicht gesendet wird.

Viele Grüße,
Matthias
[ Timberwolf Entwicklung ]

TWS 2400 ID:102 VPN offen, Reboot auf Nachfrage
TWS 3500 ID:695 VPN offen, Bitte kein Reboot ohne Absprache

Robert_Mini
Reactions:
Beiträge: 3842
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1231 Mal
Danksagung erhalten: 2130 Mal

#3

Beitrag von Robert_Mini »

Ich sehe (zumindest am Handy) keinen Fehler.
Eine Frage trotzdem: wieso löst du das zusätzliche Senden nach 2/4 Sekunden nicht per Timer (Monoflop)?

Dann sparst du das String manipulieren…

Lg
Robert
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297
Benutzeravatar

Ersteller
jensgulow
Reactions:
Beiträge: 443
Registriert: Fr Apr 19, 2019 4:37 pm
Wohnort: Leipzig
Hat sich bedankt: 72 Mal
Danksagung erhalten: 201 Mal

#4

Beitrag von jensgulow »

Hallo Robert,

das mit den Timern ist mir in der konfiguration zu unfelxibel - da müsste ich immer jeweils ein Zeitdelta als Eingang eingeben, welches bei mehreren Eingängen (sind bei mir eigentlich 5 Stück) unübersichtlich ist. Weiterhin kann ich mit meiner Lösung relativ einfach mal den Schaltzeitpunkt ändern ohne die anderen Eingänge zu beeinflussen (immer ausgehend von dem "Referenzereignis"). ....
Prinzipiell habe ich die Timerlösung bei anderen Bausteinen auch verwandt.

Die Frage ist eben: Was stimmt an meiner oben geposteten Logik nicht?
Wenn ich diese ein zweites Mal aktiviere, dann scheint alles bis incl. dem Zusammensetzen der cronstrings korrekt zu laufen. Nur dann geht es eben nicht weiter ...
Da bin ich eben ratlos, weil auch die analyse der Grafana-Daten hat mir nicht wirklich weiter geholfen.

Vielleicht findet ja jemand den Übeltäter ;-)
Viele Grüße

Jens

_____________________________________________________________________
TWS 2600#394 , TWS 3500L#1051, VPN offen, Reboot erlaubt
Was wird genutzt? -> TWS, KNX, 1-wire, MQTT, MODBUS, Http-REST-API, IFTTT, Enocean, Amazon Alexa

ms20de
Elaborated Networks
Reactions:
Beiträge: 1171
Registriert: Sa Aug 11, 2018 9:14 pm
Hat sich bedankt: 326 Mal
Danksagung erhalten: 606 Mal

#5

Beitrag von ms20de »

Nur so eine Idee, könnte es etwas mit dem Cron Problem von hier zu tun haben?
viewtopic.php?t=5550

Viele Grüße,
Matthias
[ Timberwolf Entwicklung ]

TWS 2400 ID:102 VPN offen, Reboot auf Nachfrage
TWS 3500 ID:695 VPN offen, Bitte kein Reboot ohne Absprache
Benutzeravatar

Ersteller
jensgulow
Reactions:
Beiträge: 443
Registriert: Fr Apr 19, 2019 4:37 pm
Wohnort: Leipzig
Hat sich bedankt: 72 Mal
Danksagung erhalten: 201 Mal

#6

Beitrag von jensgulow »

Eher nicht - wie gesagt, die cronstrings werden ja richtig "zusammengesetzt", beim ersten Durchlauf funktioniert ja auch alles bestens....
Viele Grüße

Jens

_____________________________________________________________________
TWS 2600#394 , TWS 3500L#1051, VPN offen, Reboot erlaubt
Was wird genutzt? -> TWS, KNX, 1-wire, MQTT, MODBUS, Http-REST-API, IFTTT, Enocean, Amazon Alexa

ms20de
Elaborated Networks
Reactions:
Beiträge: 1171
Registriert: Sa Aug 11, 2018 9:14 pm
Hat sich bedankt: 326 Mal
Danksagung erhalten: 606 Mal

#7

Beitrag von ms20de »

jensgulow hat geschrieben: Fr Nov 22, 2024 7:43 pm Eher nicht - wie gesagt, die cronstrings werden ja richtig "zusammengesetzt", beim ersten Durchlauf funktioniert ja auch alles bestens....
Das Problem in dem Thread war, das die Ausführungszeit einmal berechnet wird, beim Ändern des Cron Strings nicht mehr.

Speicher dich mal nexttrigger bei Cron in eine Variable, ob der Wert richtig wäre.

Vielleicht bin ich auch auf falschen Pferd 🐴

Viele Grüße,
Matthias
[ Timberwolf Entwicklung ]

TWS 2400 ID:102 VPN offen, Reboot auf Nachfrage
TWS 3500 ID:695 VPN offen, Bitte kein Reboot ohne Absprache
Benutzeravatar

Ersteller
jensgulow
Reactions:
Beiträge: 443
Registriert: Fr Apr 19, 2019 4:37 pm
Wohnort: Leipzig
Hat sich bedankt: 72 Mal
Danksagung erhalten: 201 Mal

#8

Beitrag von jensgulow »

Okay, werde ich heute Abend mal ausprobieren. Danke für den Denkanstoß.
Viele Grüße

Jens

_____________________________________________________________________
TWS 2600#394 , TWS 3500L#1051, VPN offen, Reboot erlaubt
Was wird genutzt? -> TWS, KNX, 1-wire, MQTT, MODBUS, Http-REST-API, IFTTT, Enocean, Amazon Alexa

Robert_Mini
Reactions:
Beiträge: 3842
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1231 Mal
Danksagung erhalten: 2130 Mal

#9

Beitrag von Robert_Mini »

Hallo zusammen!
Hab mir das jetzt genauer angesehen, tatsächlich wird $nexttrigger nicht übernommen, obwohl beim manuellen trigger am ersten Eingang die $Cron Zeitpunkte richtig berechnet werden (auch bei der 2. Wiederholung).

@ms20de: Nach meinem Test wird $nexttrigger erst übernommen, wenn ich zwischendurch auf inaktiv geschaltet wurde.

Die unten zitierte Bedingung, wäre in der Logik von Jens eigentlich erfüllt:
Trigger der Logik => Cron-Zeit setzen => Cron ruft die Logik zum Zeitpunkt +2 wieder auf

Es scheint, als ob das cron Modul nicht den Status false einnimmt, wenn man im gleichen Aufruf den Cronstring erneuert.
So richtig glauben will ich das aber selbst noch nicht...

Code: Alles auswählen

Der neue Zeitpunkt wird nur berechnet, wenn mindestens eines von zwei Ereignissen eingetreten ist:
Der aktuelle Timer abgelaufen ist
Der Aktiv-Ausgang von FALSE auf TRUE geschaltet wurde
Viele Grüße,
Matthias
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

Robert_Mini
Reactions:
Beiträge: 3842
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1231 Mal
Danksagung erhalten: 2130 Mal

#10

Beitrag von Robert_Mini »

Nachtrag: ich habe gerade was anderes nochmal nachgesehen:
Warum verwendest du eigentlich nicht das Modul wakeup? Dort kannst du direkt die unix-time in integer verwenden, d.h. du sparst die gesamten string-Operationen...

In deinem Fall wäre das so (funktioniert auch!!)

Code: Alles auswählen

/**======================================================================================= 
Gute-Nacht-Szene

-> unmittelbar 0 (false) an Zentral aus (0/1/1) senden, dann

-> geschalten werden einige boolean-Verbraucher sowie die Jalousien im Wohnzimmer

-> Korrekturzeiten sind ausgehnde vom Zeitpunkt des Schaltbefehles in Sekunden angegeben 
=========================================================================================*/ 
{ 
    "Level": [ 
	// Input-Level
	["$input","bool",true],
	["$norm","integer",60],
	["$Korrektur1","int",0],
	["$Korrektur4","int",0],
	["$VAR<Inhibit?>","bool",false],

	// Interne Variablen
	["$true","bool",true],
	["$true_ext","bool",true],
	["$false","bool",false],
	["$input_trig","bool",false],
	["$time","int",0],
	["$utime","int",0],
	["$Cron1","string","0"],
	["$Cron4","string","0"],

	["$Out1","int",0],
	["$Out4","int",0],
	["$Formula","string","X1+X2"],

    ["$test","bool",true],
    ["$next1","int",0],
    ["$next4","int",0],

	// Output-Level
	["$zentral_out","bool",true],
	["$Result1","bool",false],
	["$Result4","bool",true],
	["$ResultOut4","bool",true]
	],

	"Module": [ 

	// Überprüfen, ob $input getriggert wurde
	["Triggered", "$input", "$input_trig" ],
	// Wenn getriggert und $input=0 -> dann $zentral_out auf 0 setzen
	["And" , ["$input_trig","-$input"], "-$zentral_out"],
	// 0 auf $zentral_out senden
	["SendExplicit","$zentral_out","$zentral_out",2],
    
	// Aktueller Zeitstempel
	["Localtime",0,"$time",0,0,0,0,0,0,0,0,0],

	// nur wenn getriggert wurde $time an $utime durchreichen
	["Latch","$time","$utime","$input_trig",0],

	["CalcFormula",["$utime","$Korrektur1"], "$Out1", "$Formula"],

	// Errechnete Zeit $Out1 in Bestandteile zerlegen. Wir brauchen $Min und $Hour

	["Wakeup","$Out1","$Result1"],
	// aber nur , wenn $Result gerade auf true gewechselt hat
	["SendExplicit","$Result1","$Result1",1], // -> sendet 1 (true)
    

	["CalcFormula",["$utime","$Korrektur4"], "$Out4", "$Formula"],
	["Wakeup","$Out4","$Result4"],

    ["Latch","-$Result4","$ResultOut4","$Result4",1],
	["SendExplicit","$Result4","$ResultOut4",1] // -> sendet 0 (false)

	], 

	"Input": [ 
	["INPUT","Verbunden mit 0/1/2","$input","a"],    
	["Korrektur1 EIN","Zeit in sec (positiv oder negativ)","$Korrektur1","u"],
	["Korrektur1 AUS","Zeit in sec (positiv oder negativ)","$Korrektur4","u"],
	["Test","xxx","$test","a"],   
	["True","xxx","$true_ext","a"],   
	["Inhibit","INHIBIT","$VAR<Inhibit?>","u"]
	], 

	"Output": [ 
	["ZENTRAL AUS","Verbunden mit 0/1/1","$zentral_out","x"],
	["EINSCHALTEN 1","Schaltereignis 1","$Result1","x"],
	["AUSSCHALTEN 1","Schaltereignis 4","$ResultOut4","x"],
	["utime","Zeit","$utime","a"],
	["out1","Schaltereignis 4","$Out1","a"],
	["out4","Schaltereignis 4","$Out4","a"]
	] 
} 
/**Der Schöpfer dieser Custom Logik überträgt die Nutzungsrechte gemäß der TOLL ("Timberwolf Open Logikblock License") die unter https://wrgt.news/TOLL zum Download zur Verfügung steht. */ 
Zuletzt geändert von Robert_Mini am Sa Nov 23, 2024 10:17 pm, insgesamt 1-mal geändert.
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297
Antworten

Zurück zu „Logikengine & Logik-Editor“