Seite 1 von 2

Zwei Werte synchron aufaddieren

Verfasst: So Feb 20, 2022 4:05 pm
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

Re: Zwei Werte synchron aufaddieren

Verfasst: So Feb 20, 2022 4:27 pm
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.)

Re: Zwei Werte synchron aufaddieren

Verfasst: So Feb 20, 2022 6:06 pm
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

Re: Zwei Werte synchron aufaddieren

Verfasst: So Feb 20, 2022 7:08 pm
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

Re: Zwei Werte synchron aufaddieren

Verfasst: So Feb 20, 2022 7:12 pm
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 🤷🏼‍♂️

Re: Zwei Werte synchron aufaddieren

Verfasst: So Feb 20, 2022 7:58 pm
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

Re: Zwei Werte synchron aufaddieren

Verfasst: Mo Feb 21, 2022 10:24 pm
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

Re: Zwei Werte synchron aufaddieren

Verfasst: Mo Feb 21, 2022 10:27 pm
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

Re: Zwei Werte synchron aufaddieren

Verfasst: Mo Feb 21, 2022 10:47 pm
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

Re: Zwei Werte synchron aufaddieren

Verfasst: Mo Feb 21, 2022 11:02 pm
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.