Seite 1 von 2

Logik "nur einer TRUE von 3 Eingängen"

Verfasst: Di Okt 01, 2019 10:02 pm
von danik
Hi

Ich suche einen Ansatz oder eine Logik für folgendes:

Eingang sind 3 x Boolean (3 KNX-Objekte)

wenn jetzt zum Beispiel Eingang 1 auf TRUE geschaltet wird, sollen die beiden anderen Ausgänge auf 0 geschaltet werden.

Ein Ansatz von mir wäre gemäss KB-Artikel Wert senden wenn Eingang TRUE und dann ein FALSE auf die beiden anderen Objekte, dies braucht dann aber 3x den Baustein und Verknüpfungen im DOS.

Ev. gibt es ja einen Ansatz dies in einer Custom-Logik zu machen. Mir fehlt da im Moment aber etwas die Phantasie.

Danke für Inputs

Gruss
Dani

Re: Logik "nur einer TRUE von 3 Eingängen"

Verfasst: Mi Okt 02, 2019 6:34 am
von Robosoc
Ich halte drei Standard module und ein gutes passendes Tag für die schneller und übersichtlicher Lösung. Aber wenn es ein custom module sein soll:

6x levels, nämlich
3x Eingänge
3x Ausgang
3x ["latch" , "EingangX" , "-AusgangX" , 1]
Wobei das X im ersten Latch 1 ist, beim zweiten 2...
Durch den Parameter 1 = trigger auf steigende Flanke.

Und jetzt musst du beim Verschalten der Ausgänge jedem Ausgang zwei knx-Gruppen zuweisen. Also z. B wenn Eingang1 = K-101, DANN Ausgang1 =K-102 + k-103.
usw.

Aber meines Erachtens ist das Aufwändiger als drei simple Standardlogiken. Die legst Du einmal schnell an und kopierst sie zwei Mal

Re: Logik "nur einer TRUE von 3 Eingängen"

Verfasst: Mi Okt 02, 2019 10:30 pm
von danik
Hi

Danke. Hab's mit latch und unterstehender Custom-Logik versucht, klappt aber nicht.

Habe die Ausgänge auf "A" gestellt, bei "C" sende er nichts. Bei "A" aber 12 Telegramme mit False (stellt dann auch den zuvor mit TRUE gestellten Eingang wieder auf FALSE).

Code: Alles auswählen

{
    "Level":[
        ["$EinA","bool",false],
        ["$EinB","bool",false],
        ["$EinC","bool",false],
        ["$AusA","bool",false],
        ["$AusB","bool",false],
        ["$AusC","bool",false],
        ["$Wahr","bool",true]
    ],
    "Module":[
        ["Latch","$EinA","$AusA","$EinA",1],
        ["Latch","$EinB","$AusB","$EinB",1],
        ["Latch","$EinC","$AusC","$EinC",1]
    ],
    "Input":[
        ["InputA","Eingang","$EinA","c"],
        ["InputB","Eingang","$EinB","c"],
        ["InputC","Eingang","$EinC","c"]
    ],
    "Output":[
        ["OutputA","Ausgang","$AusA","c"],
        ["OutputB","Ausgang","$AusB","c"],
        ["OutputC","Ausgang","$AusC","c"]
    ]
}
Gruss
Dani

Re: Logik "nur einer TRUE von 3 Eingängen"

Verfasst: Mi Okt 02, 2019 11:08 pm
von Robosoc
Du hast auf jeden Fall das negieren innerhalb de Latches vergessen...probiere es mal so, siehe unten.
Und ein a wie always an den Ausgängen anstelle einem c wie change halte ich hier auch für sinnvoller, dann ist Dir das Ergebnis im Doktormodus klarer. Auf der anderen Seite erzeugst Du unnötig buslast ...

Code: Alles auswählen

{
    "Level":[
        ["$EinA","bool",false],
        ["$EinB","bool",false],
        ["$EinC","bool",false],
        ["$AusA","bool",false],
        ["$AusB","bool",false],
        ["$AusC","bool",false]
    ],
    "Module":[
        ["Latch","-$EinA","$AusA","$EinA",1],
        ["Latch","-$EinB","$AusB","$EinB",1],
        ["Latch","-$EinC","$AusC","$EinC",1]
    ],
    "Input":[
        ["InputA","Eingang","$EinA","c"],
        ["InputB","Eingang","$EinB","c"],
        ["InputC","Eingang","$EinC","c"]
    ],
    "Output":[
        ["OutputA","Ausgang","$AusA","a"],
        ["OutputB","Ausgang","$AusB","a"],
        ["OutputC","Ausgang","$AusC","a"]
    ]
}

Re: Logik "nur einer TRUE von 3 Eingängen"

Verfasst: Mi Okt 02, 2019 11:11 pm
von Robosoc
Noch besser:

Code: Alles auswählen

{
    "Level":[
        ["$EinA","bool",false],
        ["$EinB","bool",false],
        ["$EinC","bool",false],
        ["$AusA","bool",false],
        ["$AusB","bool",false],
        ["$AusC","bool",false],
        ["$Falsch","bool",false]
    ],
    "Module":[
        ["Latch","$Falsch","$AusA","$EinA",1],
        ["Latch","$Falsch","$AusB","$EinB",1],
        ["Latch","$Falsch","$AusC","$EinC",1]
    ],
    "Input":[
        ["InputA","Eingang","$EinA","c"],
        ["InputB","Eingang","$EinB","c"],
        ["InputC","Eingang","$EinC","c"]
    ],
    "Output":[
        ["OutputA","Ausgang","$AusA","c"],
        ["OutputB","Ausgang","$AusB","c"],
        ["OutputC","Ausgang","$AusC","c"]
    ]
}

Re: Logik "nur einer TRUE von 3 Eingängen"

Verfasst: Mi Okt 02, 2019 11:17 pm
von Robosoc
danik hat geschrieben: Mi Okt 02, 2019 10:30 pm Habe die Ausgänge auf "A" gestellt, bei "C" sende er nichts. Bei "A" aber 12 Telegramme mit False (stellt dann auch den zuvor mit TRUE gestellten Eingang wieder auf FALSE).
Ich Hätte wohl verstanden, warum 12 Telegramme gesendet wurden , aber dass sie als false rausgingen wundert mich.

Ich teste jetzt auch mal, ist mit dem iPad 2 air im Bett nur immer so blöd im dok Modus... :D

Re: Logik "nur einer TRUE von 3 Eingängen"

Verfasst: Mi Okt 02, 2019 11:44 pm
von Robosoc
HAbe den Gedankenfehler gefunden und konnte das gesamte Verhalten jetzt nachvollziehen... Du bekommst gleich ne neue :D idee

Re: Logik "nur einer TRUE von 3 Eingängen"

Verfasst: Do Okt 03, 2019 12:14 am
von Robosoc
So, jetzt aber, sorry

Getestet und ich meine es funktioniert. Achtung jetzt die Ein- und Ausgänge gleich beschalten:
Bild

Und nicht wundern, wenn Du die Logik manuell durch setzen eines Eingangs auf True im Doktor Modus Triggerst, Triggert sie sich zweimal.

Code: Alles auswählen

{
    "Level":[
        ["$EinA","bool",false],
        ["$EinB","bool",false],
        ["$EinC","bool",false],
        ["$AusA","bool",false],
        ["$AusB","bool",false],
        ["$AusC","bool",false],
        ["$Wahr","bool",true],
        ["$Falsch","bool",false]
    ],
    "Module":[
        // Eingang A würde True gesetzt
        ["Latch","$Wahr","$AusA","$EinA",1],
        ["Latch","$Falsch","$AusB","$EinA",1],
        ["Latch","$Falsch","$AusC","$EinA",1],
        // Eingang B würde True gesetzt
        ["Latch","$Wahr","$AusB","$EinB",1],
        ["Latch","$Falsch","$AusA","$EinB",1],
        ["Latch","$Falsch","$AusC","$EinB",1],
        // Eingang C würde True gesetzt
        ["Latch","$Wahr","$AusC","$EinC",1],
        ["Latch","$Falsch","$AusB","$EinC",1],
        ["Latch","$Falsch","$AusA","$EinC",1]
    ],
    "Input":[
        ["InputA","Eingang","$EinA","c"],
        ["InputB","Eingang","$EinB","c"],
        ["InputC","Eingang","$EinC","c"]
    ],
    "Output":[
        ["OutputA","Ausgang","$AusA","A"],
        ["OutputB","Ausgang","$AusB","A"],
        ["OutputC","Ausgang","$AusC","A"]
    ]
}

Re: Logik "nur einer TRUE von 3 Eingängen"

Verfasst: Sa Okt 05, 2019 10:20 am
von danik
Hi Sven

Vielen dank für die Unterstützung. Genau das habe ich gesucht. Alle 3 Gruppenadressen werden noch doppelt gesendet, das spielt ja aber keine Rolle.

Vielen dank

Gruss
Dani

Re: Logik "nur einer TRUE von 3 Eingängen"

Verfasst: Sa Okt 05, 2019 10:26 am
von Robosoc
Gerne!
danik hat geschrieben: Sa Okt 05, 2019 10:20 am Alle 3 Gruppenadressen werden noch doppelt gesendet, das spielt ja aber keine Rolle.
Aber nur, wenn du das manuell im Doktormodus trigggers, odeR? Wenn es über den Bus getriggert wird, müsste es glaube ich ohne doppeltes Senden klappen. Hast Du das auch schon analysiert?