UPGRADE IP 9 verfügbar!
Timberwolf VISU jetzt mit NEUEM Layout Editor
Freie Anordnung, Reihenfolge und Größe der Widgets - viele weitere Verbesserungen
Infos im Wiki: https://elabnet.atlassian.net/l/cp/06SeuHRJ

NEU! Insider & Leistungsmerkmale FÜR ALLE freigeschaltet
Damit kann nun jeder das Upgrade vornehmen und VISU & IFTTT testen. Alle Info hier: viewtopic.php?f=8&t=5074

[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
Benutzeravatar

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

Zwei Werte synchron aufaddieren

#1

Beitrag von Zugschlus »

Hi,

gegeben sei die folgende Logik:
Screenshot_20220220_154927.png
Dabei sind 1W179 und 1W180 Meßwerte, die zusammengerechnet den aktuellen Luftdruck ergeben. Konkret bedeutet:
1W1791W180Wert
210001002
9970997
Das bedeutet widerum natürlich, dass die beiden Werte synchron ausgelesen und auch synchron in der Logik verarbeitet werden. Stellt man das nicht sicher, kann beim Durchschreiten der 1000er-Grenze ein absurd falsches Ergebnis wie "2" oder "1998" herauskommen.

Am schönsten wäre es ja, wenn schon dier 1-Wire-Konfiguration sichergestellt werden könnte, dass die beiden Werte immer "zusammen" ausgelesen werden. Aktuell hat man beim Auslesen der 1-Wire-Sensoren alle 300 Sekunden eine sehr hohe Wahrscheinlichkeit, den einen Wert vor, und den anderen nach Durchschreiten der 1000er-Grenze ausgelesen zu haben. Ich gehe davon aus, dass man hier keinen Einfluss auf das Scheduling der 1-Wire-Abfragen hat, denn in der Praxis liegen die Werte regelmäßig mehrere Minuten auseinander (und häufiger auslesen will ich sie nicht, das ist aber auch keine valide Lösung).

Ich möchte deswegen gerne ein zweites Logikglied dahinterschalten (oder am Inhibit-Anschluss der Addition anschileßen), das die Ausgabe eines neuen Wertes unterdrückt, wenn er unter 500 oder über 1500 liegt.

Mache ich das mit einer Custom-Logik? GIbt es ein fertiges Modul das das könnte? Oder ist schon mein Ansatz falsch?

Grüße
Marc
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
--
Marc Haber, St. Ilgen. Freier IT-Berater, Debian Developer.
TWS 950Q #326, VPN auf Anfrage - KNX, 1Wire (13/55/54 Slaves), MQTT, Cometvisu, viel Grafana, ganz ein bisschen Logik.

adimaster
Reactions:
Beiträge: 375
Registriert: So Apr 14, 2019 11:12 am
Hat sich bedankt: 203 Mal
Danksagung erhalten: 198 Mal

#2

Beitrag von adimaster »

Hallo Marc,

ich habe noch nicht alles verstanden (wieso ist der eine Wert mal 2 und mal 1000). Aber vermutlich hilft es Dir schon, wenn Du das Triggerverhalten änderst.

Den einen Eingang des einen Summanden setzt Du auf „U“ für Update (Datum wird lediglich eingelesen, aber die Addition wird noch nicht gestartet). Und den Eingang des 2. Summanden belässt Du auf „A“ für Always—> geht an diesem Eingang ein Datum ein, dann wird getriggert und sofort addiert.

Oder Du lässt beide auf U und fügst über „+“ noch einen Intervall Trigger hinzu (z.B. alle 300 Sekunden für Dein Bsp.)
Zuletzt geändert von adimaster am So Feb 20, 2022 4:53 pm, insgesamt 1-mal geändert.
Grüße, Adi
TWS 2600 ID: 331, VPN geschlossen, Reboot nach Rücksprache
Benutzeravatar

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

#3

Beitrag von Zugschlus »

adimaster hat geschrieben: So Feb 20, 2022 4:27 pm ich habe noch nicht alles verstanden (wieso ist der eine Wert mal 2 und mal 1000). Aber vermutlich hilft es Dir schon, wenn Du das Triggerverhalten änderst.
Der eine Wert hat die ersten drei Stellen, der zweite die vierte Stelle. 998 = 0 + 998, 1002 = 1000 + 2
adimaster hat geschrieben: So Feb 20, 2022 4:27 pm Den einen Eingang des einen Summanden setzt Du auf „U“ für Update (Datum wird lediglich eingelesen, aber die Addition wird noch nicht gestartet). Und den Eingang des 2. Summanden belässt Du auf „A“ für Always—> geht an diesem Eingang ein Datum ein, dann wird getriggert und sofort addiert.
Das verlässt sich darauf dass immer zuerst der eine Wert und dann de andere kommt. Nach meinem Verständnis des 1Wire-Subsystems ist das aber nicht gewährleistet.
adimaster hat geschrieben: So Feb 20, 2022 4:27 pm Oder Du lässt beide auf U und fügst über „+“ noch einen Intervall Trigger hinzu (z.B. alle 300 Sekunden für Dein Bsp.)
Und wenn der Intervalltrigger zwischen den Updates der beiden Werte kommt?

Grüße
Marc
--
Marc Haber, St. Ilgen. Freier IT-Berater, Debian Developer.
TWS 950Q #326, VPN auf Anfrage - KNX, 1Wire (13/55/54 Slaves), MQTT, Cometvisu, viel Grafana, ganz ein bisschen Logik.

Robert_Mini
Reactions:
Beiträge: 3741
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1164 Mal
Danksagung erhalten: 2058 Mal

#4

Beitrag von Robert_Mini »

Die Frage zuerst ist, wie man überhaupt erkennt, dass gerade beide Werte zusammengehören?
Da es der Luftdruck ist, könnte man das sicher plausibilisieren und nur dann senden, wenn’s zusammenpasst.

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

adimaster
Reactions:
Beiträge: 375
Registriert: So Apr 14, 2019 11:12 am
Hat sich bedankt: 203 Mal
Danksagung erhalten: 198 Mal

#5

Beitrag von adimaster »

Was ist denn das für ein Sensor, der 2 Werte liefert, die addiert werden müssen.
Ist vll. leichter den richtigen Tipp zu geben, wenn die Arbeitsweise der Sensoren klarer ist 🤷🏼‍♂️
Grüße, Adi
TWS 2600 ID: 331, VPN geschlossen, Reboot nach Rücksprache

EarlBacid
Reactions:
Beiträge: 371
Registriert: So Aug 26, 2018 5:59 pm
Wohnort: Herborn
Hat sich bedankt: 134 Mal
Danksagung erhalten: 235 Mal

#6

Beitrag von EarlBacid »

Hallo Marc,

die Logik die du sucht ist der "Begrenzer". Dem gibst du einen Minimal und einen Maximalwert, sowie den Ausgang deiner Addition. Solange der Wert zwischen Minimal und Maximal liegt, wird er am Ausgang ausgegeben, ansonsten eben nicht.

Viele Grüße
Earl
Wiregate#1504 + PBM -
Timberwolf 950Q #233 / VPN aktiv / Reboot OK
EFH mit KNX, 1-Wire, DMX, PV und Strom über MQTT
Docker: MQTT Broker, Unifi WLAN Controller, NodeJS, CometVisu
Benutzeravatar

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

#7

Beitrag von Zugschlus »

EarlBacid hat geschrieben: So Feb 20, 2022 7:58 pm die Logik die du sucht ist der "Begrenzer". Dem gibst du einen Minimal und einen Maximalwert, sowie den Ausgang deiner Addition. Solange der Wert zwischen Minimal und Maximal liegt, wird er am Ausgang ausgegeben, ansonsten eben nicht.
Der Begrenzer gibt bei einem Wert unterhalb des Minimalwertes den Minimalwert aus, bei einem Wert oberhalb des Maximalwerts den Maximalwert.

Ich hätte gerne, dass er einfach schweigt.

Grüße
Marc
--
Marc Haber, St. Ilgen. Freier IT-Berater, Debian Developer.
TWS 950Q #326, VPN auf Anfrage - KNX, 1Wire (13/55/54 Slaves), MQTT, Cometvisu, viel Grafana, ganz ein bisschen Logik.
Benutzeravatar

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

#8

Beitrag von Zugschlus »

adimaster hat geschrieben: So Feb 20, 2022 7:12 pm Was ist denn das für ein Sensor, der 2 Werte liefert, die addiert werden müssen.
Ist vll. leichter den richtigen Tipp zu geben, wenn die Arbeitsweise der Sensoren klarer ist 🤷🏼‍♂️
Das ist ein Barometer, das einen DS2438 simuliert (den DS2438 deswegen, weil das ein Chip ist, den die Homeserver wie der Timberwolf meist direkt unterstützen). Ich vermute, dass die Aufteilung auf zwei Werte erfolgt, weil die Auflösung eines DS2438-Registers nicht reicht um den kompletten Wert zu transportieren. Eigentlich ist es auch D = W1 * 1000 + W2, aber die Multiplikation mit 1000 erledige ich schon in der Konfiguration des 1Wire-Slaves (Value Manipulation im Device Manager).

Grüße
Marc
--
Marc Haber, St. Ilgen. Freier IT-Berater, Debian Developer.
TWS 950Q #326, VPN auf Anfrage - KNX, 1Wire (13/55/54 Slaves), MQTT, Cometvisu, viel Grafana, ganz ein bisschen Logik.
Benutzeravatar

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

#9

Beitrag von Zugschlus »

Die Lösung für das Problem (das sich leider als das falsche herausgestellt hat) war meine erste Custom-Logik. Dabei war das neue Wiki wirklich hilfreich, in dem endlich mal der Aufbau einer Custom-Logik so beschrieben war, dass der beschränkte Informatikergeist ihn verstanden hat. Hier meine Lösung:

Code: Alles auswählen

{
  "_Meta": { // Optional
    "Description": "",
    "Version": "1.00",
    "Icon": "" // format: "data:image/svg+xml;base64,ENCODED_FILE"
  },
  "Input": [
    ["Summand 1","Summand 1","$In1","a" ],
    ["Summand 2","Summand 2","$In2","a" ],
    ["Grenze unten","Grenze unten","$gru","a" ],
    ["Grenze oben","Grenze oben","$gro","a" ]
  ],
  "Output": [
    ["Luftdruck","Luftdruck","$Out","a" ],
    ["Summe","Summe","$Summe","a" ],
    ["SumGru","SumGru","$SumGru","a" ],
    ["GroSum","GroSum","$GroSum","a" ],
    ["Valid","Valid","$Valid","a" ]
  ],
  "Module": [
    ["CalcFormula",["$In1","$In2"],"$Summe","$AddFormel"],
    ["Comparator","$gro","$GroSum","$Summe"],
    ["Comparator","$Summe","$SumGru","$gru"],
    ["And",["$SumGru","$GroSum"],"$Valid"],
    ["Latch","$Summe","$Out","$Valid",0]
  ],
  "Level": [
    ["$AddFormel","string","X1+X2"],
    ["$In1","float",0],
    ["$In2","float",0],
    ["$gru","float",500],
    ["$gro","float",1500],
    ["$Summe","float",0],
    ["$SumGru","bool",false],
    ["$GroSum","bool",false],
    ["$Valid","bool",false],
    ["$Out","float",0]
  ]
}
Ich summiere also beide Werte und gebe die Summe in einer Latch erst dann frei, wenn geprüft wurde, ob der Wert größer als der Minimalwert und kleiner als der Maximalwert ist. Somit HEUREKA, damit ist für mich der Knoten geplatzt und ich kann in Zukunft hemmungslos herumcustomlogiken. Das ist für mich ein echter Durchbruch, alleine dafür hat sich die Arbeit gelohnt. Da es sich hierbei um meine erste Custom-Logik handelt, bin ich natürlich für Eure Verbesserungsvorschläge dankbar. Aber besseren Logikstil lernen ist immer gut und hilfreich.

Leider musste ich inzwischen feststellen, dass der Wert z.B. bei Ausgabe 998 nicht aus 0 und 998 zusammengesetzt wird, sondern aus 990 und 8. Damit entstehen auch unter Benutzung meiner Custom-Logik blöde Sprünge in der Grafik, weil z.B. beim Wechsel von 1000 auf 999 zuerst der eine Wert von 1000 auf 990 springt und dann der andere von 0 auf 9. Damit greift meine Idee mit dem Plausibiliätscheck nicht mehr und ich habe in der Timeseries zwischen den richtigen Werten 1000 und 999 einen falschen Wert 990, siehe Grafik:
Screenshot_20220221_223900.png
  • grün: Summe der beiden Werte in Originallage (mit unpassenden und inkorrekten Sprüngen)
  • blau: der "große" Wert um 50 nach unten geschoben (in sich korrekt)
  • gelb: der "kleine" Wert um 900 nach oben geschoben (ebenfalls in sich korrekt)
Die Verschiebungen der blauen und gelben Linie sind ausschließlich in der Grafik zur Präsentation erfolgt, sonst hätte ich zwei Bilder gebraucht oder man hätte die Ausreißer nicht mehr gesehen.

Habt Ihr eine Idee, ob man das im Rahmen einer Logik geradegebogen bekommt? Gibt es ein Logikglied, das solche kurzfristigen Sprünge eliminiert? Oder muss ich da doch eher auf der 1-Wire-Ebene hinfassen und irgendwie dafür sorgen, dass die Werte halbwegs synchron ausgelesen werden?

Grüße
Marc
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
--
Marc Haber, St. Ilgen. Freier IT-Berater, Debian Developer.
TWS 950Q #326, VPN auf Anfrage - KNX, 1Wire (13/55/54 Slaves), MQTT, Cometvisu, viel Grafana, ganz ein bisschen Logik.

terseek
Reactions:
Beiträge: 265
Registriert: Mi Sep 05, 2018 1:09 pm
Hat sich bedankt: 492 Mal
Danksagung erhalten: 119 Mal

#10

Beitrag von terseek »

Zugschlus hat geschrieben: Mo Feb 21, 2022 10:47 pm Gibt es ein Logikglied, das solche kurzfristigen Sprünge eliminiert?
Schau Dir doch mal den Tiefpass an, der müsste das können.
Zuletzt geändert von terseek am Mo Feb 21, 2022 11:03 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
Antworten

Zurück zu „Logikengine & Logik-Editor“