Seite 1 von 1

Schwellwert-Kombination in Custom Logik

Verfasst: Mo Aug 26, 2019 10:03 pm
von Robert_Mini
Hallo @S. Kolbinger!

Ich stehe gerade auf dem Schlauch oder es ist doch komplexer als gedacht.

Ich brauche für die Beschattung folgende Logik (als teil einer Custom Logic, daher kann ich die Triggeroptionen nicht nützen).
- Wenn Helligkeit 400 Lux überschreitet => sende 1
- Wenn Helligkeit <300 Lux und Elevation <7° sende 0
- Dazwischen bzw. bei Dunkelheit soll nichts gesendet werden.

Selbst wenn ich bei der ersten Bedingung gedanklich eine Elevation >7° ergänze, fällt mir im Moment keine Lösung dafür ein :angry-banghead: :angry-banghead: .

Danke für eine Anregung dazu,
Robert

Re: Schwellwert-Kombination in Custom Logik

Verfasst: Di Aug 27, 2019 8:43 am
von S. Kolbinger
Hallo Robert,
Robert_Mini hat geschrieben: Mo Aug 26, 2019 10:03 pm Ich stehe gerade auf dem Schlauch oder es ist doch komplexer als gedacht.
zu allererst, Senden ist eine Aktion die nur auf die Ausgänge der gesamten Logik-Zelle angewendet werden kann.
Der BegriffSendenist innerhalb einer Custom-Logic eigentlich nicht korrekt.
Richtiger wäre der Begriff, einem Level(Variable) wird ein Wert zugewiesen.
Robert_Mini hat geschrieben: Mo Aug 26, 2019 10:03 pm - Wenn Helligkeit 400 Lux überschreitet => sende 1
- Wenn Helligkeit <300 Lux und Elevation <7° sende 0
- Dazwischen bzw. bei Dunkelheit soll nichts gesendet werden.
Wenn ich mal davon ausgehe, dass es sich hier um einen boolschen Wert handelt (0/1), dann stellt sich hier die Fragen, was du mit "soll nichts gesendet werden" meinst. Wie gesagt, ein Level(Variable) hat immer einen Wert (anfangs den Initial-Wert). Und bei boolschen Werten gibt es da nur zwei Möglichkeiten.

Falls du einSendender aller Ausgänge unterbinden möchtest, kannst du das "Break"-Modul verwenden. Das bricht die Berechnung der Logik-Zelle an dieser Stelle ab. Durch den Abbruch werden auch keine Ausgänge gesendet.

Kannst du das Problem noch genauer beschreiben, vielleicht habe ich es auch missverstanden. :confusion-scratchheadyellow:

Re: Schwellwert-Kombination in Custom Logik

Verfasst: Di Aug 27, 2019 11:42 am
von Robert_Mini
Hallo Stefan!

Was ich meinte:
Logikeingang als Lux => das heißt die Logik wird zwangsweise regelmäßig getriggert.
Es gibt aber nur 2 Events, wo ein Output generiert werden soll.
1x , wenn Helligkeit 400 Lux überschreitet => sende 1
1x , wenn Helligkeit <300 Lux und Elevation <7° sende 0
Dazwischen bzw. bei Dunkelheit soll nichts gesendet werden, d.h. der Lux-Eingang darf nicht das wiederholte senden triggern.

Da man innerhalb einer Custom-Logik keine Sende-Optionen hat, geht dieses Vorhaben sowieso nur als getrennt Logik, was auch völlig ok ist.

Heißt für mich: Senden on change.
Aber wie verknüpfe ich Schwellwert Lux mit einem Schwellwert Elevation, so dass das Verhalten oben erreicht wird.
Ein UND würde ja sofort bei unterschreiten der 300 Lux eine 0 senden, ich brauche also ein "invertiertes" und, wo erst 0 gesendet wird, wenn beide Eingänge 0 sind.

Danke
Robert

Re: Schwellwert-Kombination in Custom Logik

Verfasst: Di Aug 27, 2019 12:53 pm
von S. Kolbinger
Hallo Robert,

man könnte es so machen:

Code: Alles auswählen

{
    "Level": [
        ["$LuxIn","float",0.0],
        ["$LuxSchwelleHell","float",400.0],
        ["$LuxSchwelleDunkel","float",300.0],
        ["$LuxHell","bool",false],
        ["$LuxDunkel","bool",false],
        ["$ElevationIn","float",0.0],
        ["$ElevationSchwelleTief","float",7.0],
        ["$ElevationTief","bool",false],
        ["$DunkelTief","bool",false],
        ["$State","integer",0],
        ["$Output","bool",false],
        ["$KonstTrue","bool",true]
    ],
    "Module": [
        ["Comparator","$LuxIn","$LuxHell","$LuxSchwelleHell"],
        ["Comparator","$LuxIn","-$LuxDunkel","$LuxSchwelleDunkel"],
        ["Comparator","$ElevationIn","-$ElevationTief","$ElevationSchwelleTief"],
        ["And",["$LuxDunkel","$ElevationTief"],"$DunkelTief"],
        ["BinaryMultiplexer",["$LuxHell","$DunkelTief"],"$State"],
        ["Multiplexer",["$Output","$KonstTrue","-$KonstTrue","$Output"],"$Output","$State"]
    ],
    "Input": [
        ["Lux","Aussenhelligkeit","$LuxIn","c"],
        ["SchwelleHell","obere Schwelle für Aussenhelligkeit","$LuxSchwelleHell","c"],
        ["SchwelleDunkel","untere Schwelle für Aussenhelligkeit","$LuxSchwelleDunkel","c"],
        ["Elevation","Winkel der Sonne über dem Horizont","$ElevationIn","c"],
        ["SchwelleTief","Winkel für tiefen Sonnenstand","$ElevationSchwelleTief","c"]
    ],
    "Output": [
        ["Out","Ausgabe Ergebnis","$Output","c"]
    ]
}
Bild
Robert_Mini hat geschrieben: Di Aug 27, 2019 11:42 am Dazwischen bzw. bei Dunkelheit soll nichts gesendet werden, d.h. der Lux-Eingang darf nicht das wiederholte senden triggern.
Damit das so funktioniert, muss die Sende-Option am Ausgang auf "on Change" stehen.


Wobei ich ehrlich gesagt etwas skeptisch bin, ob man Helligkeit und Sonnenwinkel unbedingt so verknüpfen muss.
Bei so tiefem Sonnenstand ist die Helligkeit eh meist sehr gering. Und falls mal doch, dauert es meist nicht sehr lange.

Aber es ist trotzdem ein gutes Beispiel, um die Lösung für so ein Problem zu zeigen. :handgestures-thumbupright:

Re: Schwellwert-Kombination in Custom Logik

Verfasst: Di Aug 27, 2019 7:30 pm
von Robert_Mini
Hallo Stefan!

Danke für deine Hilfe!
Vorweg bezüglich braucht man das: ja, denn das hat mir bisher gefehlt - es gibt Fälle zB vor Gewitter o.ä. da hat meine Wetterstation dann auch unter Tags auf Nacht geschaltet und die Jalousien zugefahren - selten aber sehr störend.

Wobei ich in deiner Lösung ehrlicherweise weder den BinaryMultiplexer verstehe, noch den Multiplexer.

BinaryMultipexer liefert offensichtlich das Ergebnis in $state, der dann als Selektor im Multiplexer verwendet wird, wobei der Wert theoretisch 0-3 werden kann.
Aber die Verwendung von Output als Input im Multiplexer übersteigt gerade mein Abstraktionsvermögen.

Danke und lg
Robert