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.