KNX Data Secure Unterstützung
für KNX Logger und KNX Busmonitor

KNX Diagnose Monitor, Import des ETS Projektes deutlich beschleunigt, Suche in der Navigation
Mehr Informationen dazu hier im Forum

Insider Version 6 zur 4.5 jetzt für alle Mitglieder des Insider Clubs installierbar
Alle Infos zum Update im Timberwolf Wiki

[Gelöst] Zwei Werte synchron aufaddieren

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

terseek
Reactions:
Beiträge: 309
Registriert: Mi Sep 05, 2018 1:09 pm
Hat sich bedankt: 576 Mal
Danksagung erhalten: 128 Mal

#11

Beitrag von terseek »

Eine wirklich richtige Lösung wird es aber weder mit dem Tiefpass noch mit jeder anderen potentiell denkbaren nachgeschalteten Logik.

Ich denke ein Ansatz könnte sein herauszufinden, welcher der beiden Werte zuerst vom Sensor gesendet wird. Dann müßte man das Eintreffen des zweiten Wertes als Trigger für die Addition verwenden.
Zuletzt geändert von terseek am Mo Feb 21, 2022 11:22 pm, insgesamt 1-mal geändert.
TWS 2600 ID:186 + 3 PBM, VPN offen, Reboot nach Vereinbarung
TWS 3500L ID:895 + 1 PBM, VPN offen, Reboot nach Vereinbarung

Robosoc
Reactions:
Beiträge: 1908
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 643 Mal
Danksagung erhalten: 797 Mal

#12

Beitrag von Robosoc »

Einfachste Lösung : Tiefpass, würde ich damit wohl machen.

Alternative im Custom Code: Du könntest ermitteln, ob das aktuelle Ergebnis des Codes ( bevor Du ihn auf den Ausgang schreibst) größer als z.B. 0,5 % vom vorherigen Ergebniswert abweicht) und wenn ja, änderst Du den Ausgang nicht. Ob dafür die Sprunghöhen ausreichend sind, bin ich mir aber nicht sicher.
VG, Sven - 3500 XL ID:1369 | 3500 L ID:1355, VPN offen, Reboot OK

Robosoc
Reactions:
Beiträge: 1908
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 643 Mal
Danksagung erhalten: 797 Mal

#13

Beitrag von Robosoc »

Zugschlus hat geschrieben: Mo Feb 21, 2022 10:47 pm Dabei war das neue Wiki wirklich hilfreich
Sehr schön, freut mich zu hören!
VG, Sven - 3500 XL ID:1369 | 3500 L ID:1355, VPN offen, Reboot OK
Benutzeravatar

Ersteller
Zugschlus
Reactions:
Beiträge: 373
Registriert: Di Okt 02, 2018 4:28 pm
Wohnort: St. Ilgen, Baden-Württemberg
Hat sich bedankt: 130 Mal
Danksagung erhalten: 113 Mal
Kontaktdaten:

#14

Beitrag von Zugschlus »

Robosoc hat geschrieben: Di Feb 22, 2022 6:36 am Alternative im Custom Code: Du könntest ermitteln, ob das aktuelle Ergebnis des Codes ( bevor Du ihn auf den Ausgang schreibst) größer als z.B. 0,5 % vom vorherigen Ergebniswert abweicht) und wenn ja, änderst Du den Ausgang nicht. Ob dafür die Sprunghöhen ausreichend sind, bin ich mir aber nicht sicher.
Man könnte auch alles was mehr als 5 hPa von der letzten Messung abweicht als offensichtlichen Messfehler ignorieren. Dann ignoriert man bei einem Ausreißer zwei Werte (die beiden Flanken, nach dem zweiten Leseprozess sind die beiden Werte wieder zusammen passend), der dritte passt wieder, wird genommen und am Ende sieht das so aus als würden da einfach zwei Werte fehlen.

Beispiel:
ZeitpunktWert AWert BSummeErgebnis
19901991akzeptiert
29909999abgelehnt
39809989akzeptiert
49807987akzeptiert
In dieser SItuation ist 2 eine Fehlmessung, der tatsächliche Wert sei 989, Wert A wurde zuerst gelesen und zeigt noch in die 990er-Range, wärhend der später gelesene Wert B schon die zu 989 passende 9 enthält. Der Sprung von 991 auf 999 wäre dann zu groß, der Wert wird abgelehnt, der nächste Wert 989 passt zu 991 und wird wieder genommen.

Ich versuch das mal.

Grüße
Marc
Zuletzt geändert von Zugschlus am Di Feb 22, 2022 2:45 pm, insgesamt 1-mal geändert.
--
Marc Haber, St. Ilgen. Freier IT-Berater, Debian Developer. Kann nicht mit Webforen.
TWS 3500L ohne Insider, VPN auf Anfrage - KNX, 1Wire (13/55/54 Slaves), MQTT, Cometvisu, viel Grafana, ganz ein bisschen Logik. unfertige Anwendungsfälle für Modbus.

Robosoc
Reactions:
Beiträge: 1908
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 643 Mal
Danksagung erhalten: 797 Mal

#15

Beitrag von Robosoc »

Ja, eas meinte ich ja und entspricht etwa den 0,5%

Aber bei dem Fehler ganz rechts in Deinem Screenshot könnte es schon sein, dass es nicht mehr funktioniert. Da hast Du einen vergleichsweise lang anliegenden Fehlerwert, der zu klein ist, während der eigentlich korrekte Messwert steigt...aber probiere es mal...zumindest ist es eine gute CustomCode Übung.
VG, Sven - 3500 XL ID:1369 | 3500 L ID:1355, VPN offen, Reboot OK

Robosoc
Reactions:
Beiträge: 1908
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 643 Mal
Danksagung erhalten: 797 Mal

#16

Beitrag von Robosoc »

Zu deinem Customcode hätte ich noch zwei Hinweise...aber nichts Falsches oder so.

Du hast bei den Ein- und Ausgängen den Namen (Parameter 1)und die Beschreibung/Tooltipp (Parameter2) gleich gewählt...das ist irgendwie sinnlos...wenn ich meine den Tooltipp nicht zu brauchen , lasse ich ihn tatsächlich leer = "", ansonsten fülle ich ihn gerne auch mit längerem Text, der mir den gewünschten Inthalt des Wertes genauer erklärt. Aber so wie Du es jetzt gemacht hast funktioniert es natürlich, ich war mir bloß nicht sicher, ob Du den Zweck des zweiten Parameters kanntest.

Du hast jeden Ein- und Ausgang mit dem Verhalten a definiert. Das ist an sich auch nicht falsch und du kannst es ja in der GUI überschreiben. Aber das birgt eine Gefahr. Solltest Du das Verhalten in der GUI umdefiniert haben und den CustomCode nachträglich mal ändern oder die Zelle kopieren, verlierst Du die in der GUI definierten Verhalten...deshalb würde ich dringend empfehlen das Triggerverhalten bereits im Code korrekt zu definieren.
VG, Sven - 3500 XL ID:1369 | 3500 L ID:1355, VPN offen, Reboot OK
Benutzeravatar

Ersteller
Zugschlus
Reactions:
Beiträge: 373
Registriert: Di Okt 02, 2018 4:28 pm
Wohnort: St. Ilgen, Baden-Württemberg
Hat sich bedankt: 130 Mal
Danksagung erhalten: 113 Mal
Kontaktdaten:

#17

Beitrag von Zugschlus »

Zugschlus hat geschrieben: Di Feb 22, 2022 2:43 pm Ich versuch das mal.
So sieht das jetzt aus:

Code: Alles auswählen

{
  "_Meta": { // Optional
    "Description": "",
    "Version": "1.00",
    "Icon": "" // format: "data:image/svg+xml;base64,ENCODED_FILE"
  },
  "Input": [
    ["Summand","Summand","$VAR<Summand!>","ai"],
    ["Differenz","Differenz","$diff","ai"]
  ],
  "Output": [
    ["LimLow","LimLow","$LimLow","a"],
    ["LimHigh","LimHigh","$LimHigh","a"],
    ["CompRes","CompRes","$CompRes","a"],
    ["Luftdruck","Luftdruck","$Out","c"],
    ["Summe","Summe","$Summe","a"],
    ["Dummy","Dummy","$Dummy","a"],
    ["Valid","Valid","$Valid","a"]
  ],
  "Module": [
    ["Polynomial","$ConstOne","$Summe",["$VAR<Summand!>"]],
    ["CalcFormula",["$Summe","$diff"],"$LimLow","$SubFormel"],
    ["CalcFormula",["$Summe","$diff"],"$LimHigh","$AddFormel"],
    ["Limiter","$Out","$Dummy","$Valid",["$LimLow","$LimHigh"]],
    ["Latch","$Summe","$Intermed","$Valid",0],
    ["Multiplexer", ["$Summe", "$Summe", "$Summe", "$Summe", "$Summe", "$Summe", "$Summe", "$Summe", "$Summe", "$Summe", "$Summe", "$Intermed"],"$Out","$Out"]
  ],
  "Level": [
    ["$VAR<Summand!>","float",0],
    ["$diff","float",0],
    ["$Summe","float",0],
    ["$LimLow","float",0],
    ["$LimHigh","float",0],
    ["$CompRes","float",0],
    ["$AddFormel","string","X1+X2"],
    ["$SubFormel","string","X1-X2"],
    ["$Dummy","float",0],
    ["$Valid","bool",true],
    ["$Intermed","float",0],
    ["$Out","float",0],
    ["$ConstOne","float",1]
  ]
}
Bild

Das funktioniert jetzt seit Februar, und in der Zeit in der es funktioniert hat, habe ich wohl vergessen wie das Ding funktioniert. Also, bloß nicht anfassen ;-)

Grüße
Marc
--
Marc Haber, St. Ilgen. Freier IT-Berater, Debian Developer. Kann nicht mit Webforen.
TWS 3500L ohne Insider, VPN auf Anfrage - KNX, 1Wire (13/55/54 Slaves), MQTT, Cometvisu, viel Grafana, ganz ein bisschen Logik. unfertige Anwendungsfälle für Modbus.
Antworten

Zurück zu „Logikengine & Logik-Editor“