NEU! UPGRADE IP 10 verfügbar!
Optimierte Darstellung von VISU Editor und VISU Client - sowie viele weitere Verbesserungen
Infos im Wiki: https://elabnet.atlassian.net/l/cp/8HzePCm3

Insider & Leistungsmerkmale FÜR ALLE freigeschaltet
Ab sofort kann jeder die neue VISU & IFTTT testen. Info: viewtopic.php?f=8&t=5074

Release V 4 am 15. Juni 2024
Es gibt nun einen fixen Termin. Info: viewtopic.php?f=8&t=5117

NEU! Ausführliches Video Tutorial zur IP 10
Jetzt werden alle Fragen beantwortet. Das Video: https://youtu.be/_El-zaC2Rrs

[V1.5 RC4] Anwendungsfall "Hausstatus" (Multiplexer?)

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

Ersteller
Matze76
Reactions:
Beiträge: 314
Registriert: Mo Sep 24, 2018 9:59 am
Hat sich bedankt: 283 Mal
Danksagung erhalten: 195 Mal

[V1.5 RC4] Anwendungsfall "Hausstatus" (Multiplexer?)

#1

Beitrag von Matze76 »

Hallo zusammen,

ich möchte meine "Hausstatus"-Logiken in die Timberwolf-Logikengine umziehen. Hier setze ich abhängig von diversen Ausgangswerten einen Hausstatus als Integer-Wert, der als DPT 5.005 auch an KNX gesendet wird. Dieser Wert (Zustand) wird dann wiederum für weitere Logiken herangezogen.

Folgende Einzellogiken spielen dort hinein (diese habe ich schon im LE umgesetzt):
Logik 1: Ist ein Hausbewohner anwesend (über Schlüssel) ? (TRUE = mindestens einer da, FALSE = alle weg)
Logik 2: Sind wir im "Tagmodus" ? (TRUE = ja, FALSE = nein, es ist Schlafenszeit aktiviert)
Logik 3: Sind wir im Zeitfenster zwischen 20 Uhr und 7 Uhr ? (TRUE = ja, FALSE = nein)
Logik 4: Ist außer den Hausbewohnern jemand da? Auch über Schlüssel abgefragt (TRUE = ja, FALSE = nein)

Nun brauche ich wahrscheinlich einen Multiplexer, um die einzelnen Abhängigkeiten in einen Hausstatus zu mappen.
Leider habe ich aber noch nicht durchschaut, wie ich das mit den Bausteinen/Basislogiken konkret umsetzen kann. Ich habe auch noch keine für mich ausreichende Beschreibung dazu gefunden.

Die einzelnen Status mit den Bedingungen sind:
StatusLogik 1Logik 2Logik 3Logik 4
0 Anwesenheit normalTRUETRUEFALSEegal
3 Anwesenheit abendsTRUETRUETRUEegal
1 Nacht (Schlafen)TRUEFALSEegalegal
2 AbwesendFALSEegalegalFALSE
4 Sonstige im HausFALSEegalegalTRUE

Ich hoffe, dass ich durch einen Lösungsvorschlag mit Erklärung anschließend selber in der Lage bin, diese Logik noch zu erweitern, oder ähnliche Multiplexer-Geschichten umzusetzen.

Besten Dank schonmal im Voraus :)

Gruß
Matthias
Gruß
Matthias

TWS 2500 ID:110 + PBM, VPN offen, Reboot nach Rücksprache

S. Kolbinger
Elaborated Networks
Reactions:
Beiträge: 588
Registriert: Mi Aug 15, 2018 11:34 am
Hat sich bedankt: 82 Mal
Danksagung erhalten: 559 Mal

#2

Beitrag von S. Kolbinger »

Hallo Matthias @Matze76 ,

heute schon mal der Lösungsvorschlag:

Code: Alles auswählen

{
    "Level": [
        ["$In1_","bool",false],
        ["$In2_","bool",false],
        ["$In3_","bool",false],
        ["$In4_","bool",false],
        ["$InStat","int",0],
        ["$Out","integer",2],
        ["$Out0_","integer",0],
        ["$Out1_","integer",1],
        ["$Out2_","integer",2],
        ["$Out3_","integer",3],
        ["$Out4_","integer",4],
        ["$VAR<Inhibit?>", "bool", false]
    ],
    "Module": [
        ["Break",["$VAR<Inhibit?>"] ],
        ["BinaryMultiplexer",["$In1_","$In2_","$In3_","$In4_"],"$InStat"],
        ["Multiplexer",["$Out2_","$Out1_","$Out2_","$Out0_","$Out2_","$Out1_","$Out2_","$Out3_","$Out4_","$Out1_","$Out4_","$Out0_","$Out4_","$Out1_","$Out4_","$Out3_"],"$Out","$InStat"]
    ],
    "Input": [
        ["Logik1","Eingang","$In1_","c"],
        ["Logik2","Eingang","$In2_","c"],
        ["Logik3","Eingang","$In3_","c"],
        ["Logik4","Eingang","$In4_","c"],
        ["Inhibit", "INHIBIT", "$VAR<Inhibit?>", "u"]
    ],
    "Output": [
        ["Status","Ausgang","$Out","c"]
    ]
}
Schau mal. ob das so funktioniert.
Alternative Vorschläge gibt es morgen.

Änderung: Ich hatte den Inhibit-Eingang vergessen. Jetzt ist er drin ;)
Zuletzt geändert von S. Kolbinger am Mo Sep 02, 2019 8:24 am, insgesamt 2-mal geändert.
Gruß,
Stefan K.

tger977
Reactions:
Beiträge: 740
Registriert: So Aug 12, 2018 9:25 am
Hat sich bedankt: 205 Mal
Danksagung erhalten: 274 Mal

#3

Beitrag von tger977 »

wahnsinn wie schnell Du sowas aus dem Hut zauberst...

ich steig da trotz einiger Programmiererfahrung nicht durch und für mich ist das ein Buch mit sieben Siegeln mit den Customlogiken und irgendwie eine komplett neue Welt. Ich habe mich nun schon mehrere Stunden damit beschäftigt, aber das ist wirklich alles andere als Plug & play und intuitiv...

Ich plage mich mit in perl sehr einfachen, kurzen Logiken jetzt schon länger rum diese in der TW Logik abzubilden, aber es macht irgendwie grad kein Spaß mehr, da ich bisher erst 4 Logiken am Laufen habe (von noch knapp 80 übrigen). Da ging es mit EDOMI deutlich schneller Logiken hinzustellen...

Hoffentlich wird die Lernkurve da bald steiler. :pray:
Gruß
Andi

TW2500 #440 (ex Timberwolf 2400 #111) mit PBM #124, Support VPN nur auf Anfrage, Reboot bitte nur nach Absprache

Robosoc
Reactions:
Beiträge: 1876
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 637 Mal
Danksagung erhalten: 775 Mal

#4

Beitrag von Robosoc »

Hallo Matthias,

eine Custom Logik ist sicher der schlankeste Lösungsweg und wenn man die beherrscht, kannst Du damit sicher auch schnell mächtige Ergänzungen zaubern. Der Weg für Einsteiger (dazu zähle ich mich auch noch) führt aber in Deiner Problemstellung - wie Du schon geschrieben hast - über einen Multiplexer, dem Binär-Multiplexer um genau zu sein. Ein solcher Multiplexer eignet sich hervorragend zum Überwachen und Darstellen eines Status, sofern Du dieses Status aus einer Menge von boolschen Signalen erstellen willst (oder bei analogen Werten diese mit Schwellwertschaltern zu 1bit binären Werten machst). Man kann ihn z.B immer dann einsetzen, wenn man das Gefühl die Aufgabenstellung hat mit verschachtelten "Wenn-Dann-Sonst" / "If-Then_Else" Bedingungen arbeiten zu müssen.

Der Binär-Multiplexer macht dabei aus mehreren einzelnen boolschen Werten einen ganzzahligen Wert.
Dahinter steckt nichts anderes als die Logik, dass in der Digitaltechnik ja auch Zahlen über bits abgebildet werden.

Eine dezimale "13" wäre binär formuliert das folgende Bitmuster "1 1 0 1"

Ich nehme mal Dein Beispiel mit 4 boolschen Werten:

Eingang 1 = eigentlich Eingang 0 (das finde ich TWS im Moment noch nicht so sauber gelöst) = Wertigkeiten der Information 20 = 1, d.h. dieses Eingangsbit beeinflusst das Ergebnis um 0 oder 1.

Eingang 2 = eigentlich Eingang 1 = Wertigkeiten der Information 21 = 2, d.h. dieses Eingangsbit beeinflusst das Ergebnis um 0 oder 2.

Eingang 3 = eigentlich Eingang 2 = Wertigkeiten der Information 22 = 4, d.h. dieses Eingangsbit beeinflusst das Ergebnis um 0 oder 4.

Eingang 4 = eigentlich Eingang 3 = Wertigkeiten der Information 23 = 8, d.h. dieses Eingangsbit beeinflusst das Ergebnis um 0 oder 8.

Nun konkret zu Deinen Eingangsbits (Logik 1-4)
Input 1: Logik 2 -> 7-20Uhr = 0, 20-7Uhr = 1
Input 2: Logik 3 -> Nacht = 0, Tag = 2
Input 3: Logik 4 -> sonst.Personen abwesend = 0, sonst.Personen abwesend = 4
Input 4: Logik 1 -> Hausbewohner Abwesend = 0, Hausbewohner-Anwesend = 8
(Die Reihenfolge ist wichtig, ich habe mir dabei was gedacht, wie Du gleich siehst. Du kannst Sie aber natürlich auch ändern, wenn Du was anderes beabsichtigst).

Output: Hausstatus als Zahl zwischen 0 und 15 (1+2+4+8).
Nun kannst Du in weiteren Logiken beliebige Reaktionen folgen lassen, z.B. mit Schwellwertschaltern am Eingang. Die Logiken dahinter wären jetzt

1: WENN Hausstatus <= 4 DANN Abwesend
2: WENN Hausstatus >4 und < 8 DANN Sonstige im Haus
3: WENN Hausstatus >= 8 und <= 9 DANN Nacht
4: WENN Hausstatus = 10 DANN Anwesend normal
5: WENN Hausstatus = 11 DANN Anwesend abends

Es sind also insgesamt 6 Logiken!!! Wenn Du die sinnvoll benennst und/oder Tags verwendest, dann hast Du die ganz schnell in der Anzeige gefiltert und Du siehst nur noch die 6 Logiken für diese Aufgabe der Haussteuerung.

Und Du kannst das ganz einfach und übersichtlich auch mal erweitern: Z.B. wenn im TWS die Alert Funktion kommt, dann schreibst Du Dir einfach eine neue Logik:

6: WENN Hausstatus >= 6 und <=7 DANN Mail an Dich selbst "Achtung, irgendjemand ist nachts mit Schlüssel in Dein Haus gegangen, ist aber kein Bewohner" :snooty: :-)
Zuletzt geändert von Robosoc am Mo Sep 02, 2019 10:03 am, insgesamt 6-mal geändert.
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK

Robosoc
Reactions:
Beiträge: 1876
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 637 Mal
Danksagung erhalten: 775 Mal

#5

Beitrag von Robosoc »

@Robert_Mini : Ich hatte ja schon 2-3 mal vesprochen eine Anleitung zum Multiplexer zu schreiben. Wollen wir diese hier einfach für das kb nehmen? Ich denke das müsste schon fast reichen, oder?
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK

S. Kolbinger
Elaborated Networks
Reactions:
Beiträge: 588
Registriert: Mi Aug 15, 2018 11:34 am
Hat sich bedankt: 82 Mal
Danksagung erhalten: 559 Mal

#6

Beitrag von S. Kolbinger »

Hallo Andi,
tger977 hat geschrieben: So Sep 01, 2019 10:02 pm wahnsinn wie schnell Du sowas aus dem Hut zauberst...
mit der Zeit bekommt man Übung ;) , aber es hilft auch enorm, wenn man sich das ganze selbst ausgedacht hat :whistle:

Herzlichen dank an Sven für die ausführliche Erklärung, das spart mir einen Haufen Zeit :bow-yellow:
Robosoc hat geschrieben: Mo Sep 02, 2019 8:27 am (das finde ich TWS im Moment noch nicht so sauber gelöst)
Das Problem ist mir bewusst, wir arbeiten an einer Lösung analog zum Binär-Demultiplexer.
Gruß,
Stefan K.

S. Kolbinger
Elaborated Networks
Reactions:
Beiträge: 588
Registriert: Mi Aug 15, 2018 11:34 am
Hat sich bedankt: 82 Mal
Danksagung erhalten: 559 Mal

#7

Beitrag von S. Kolbinger »

Hallo zusammen,

ich hatte gestern ja noch eine alternative Lösung versprochen.
Besonders, wenn man sehr viele Eingänge hat, kann die Lösung mit Binär-Multiplexer und Multiplexer unhandlich werden.
Bei n Eingängen, muss man dann 2n Zustände im Multiplexer berücksichtigen.

Eine Alternative dazu:

Code: Alles auswählen

{
    "Level": [
        ["$In1_","bool",false],
        ["$In2_","bool",false],
        ["$In3_","bool",false],
        ["$In4_","bool",false],
        ["$Out","integer",2],
        ["$OutStat0_","bool",false],
        ["$Out0_","integer",0],
        ["$OutStat1_","bool",false],
        ["$Out1_","integer",1],
        ["$OutStat2_","bool",false],
        ["$Out2_","integer",2],
        ["$OutStat3_","bool",false],
        ["$Out3_","integer",3],
        ["$OutStat4_","bool",false],
        ["$Out4_","integer",4],
        ["$VAR<Inhibit?>", "bool", false]
    ],
    "Module": [
        ["Break",["$VAR<Inhibit?>"] ],
        ["And",["$In1_","$In2_","-$In3_"],"$OutStat0_"],
        ["Latch","$Out0_","$Out","$OutStat0_",0],
        ["And",["$In1_","$In2_","$In3_"],"$OutStat3_"],
        ["Latch","$Out3_","$Out","$OutStat3_",0],
        ["And",["$In1_","-$In2_"],"$OutStat1_"],
        ["Latch","$Out1_","$Out","$OutStat1_",0],
        ["And",["-$In1_","-$In4_"],"$OutStat2_"],
        ["Latch","$Out2_","$Out","$OutStat2_",0],
        ["And",["-$In1_","$In4_"],"$OutStat4_"],
        ["Latch","$Out4_","$Out","$OutStat4_",0]
    ],
    "Input": [
        ["Logik1","Eingang","$In1_","c"],
        ["Logik2","Eingang","$In2_","c"],
        ["Logik3","Eingang","$In3_","c"],
        ["Logik4","Eingang","$In4_","c"],
        ["Inhibit", "INHIBIT", "$VAR<Inhibit?>", "u"]
    ],
    "Output": [
        ["Status","Ausgang","$Out","c"]
    ]
}
Hier wird jede Bedingung einzeln über ein UND-Modul erfasst und bei Erfüllung per Latch an den Ausgang geschrieben.

Welcher der beiden Lösungsansätze der bessere ist, hängt von der Anzahl der Eingänge und der Anzahl der Möglichen Ausgangswerte ab.
Gruß,
Stefan K.

Ersteller
Matze76
Reactions:
Beiträge: 314
Registriert: Mo Sep 24, 2018 9:59 am
Hat sich bedankt: 283 Mal
Danksagung erhalten: 195 Mal

#8

Beitrag von Matze76 »

Hallo @S. Kolbinger,

vielen Dank!! Es funktioniert wunderbar, und das mit einem so schlanken Stück Code. Ich werde versuchen, den nachzuvollziehen, damit du zukünftig nicht mehr auf die Idee kommen musst sowas am Sonntagabend zu machen ;)

Hallo @Robosoc,

vielen Dank für deine Erläuterungen! Sehr gut für das Verständnis des Binärmultiplexers.

Ich bin bisher auch eher in der "IF/ELSE"-Welt zu Hause gewesen, und genau dieser Punkt, wie ich meine Wahrheitstabellen in "Logik-Sprache" bzw. Schaltung übersetze hat mir gefehlt. Das ist mir mit der Umwandlung in Binärcode jetzt klar geworden. Das sollte unbedingt mit anschaulichen Beispielen in die Doku, sonst kommt man als "Otto-Normalverbraucher" nicht dahinter.

Was ich schon mal sagen kann: Vorher (WG-Logikprozessor, openHAB) war das Setzen des Status über diverse IF/ELSE-Anweisungen in verschiedenen Logiken/Rules untergebracht. Ich habe es damit aber nie geschafft, alle Zustände in allen Situationen richtig zu setzen. Z. B. wurde nach Abwesenheit bei Anhängen der Schlüssel einfach auf Anwesenheit geschaltet, ohne die anderen Zustände zu berücksichtigen.

Das kann man jetzt mit dem Multiplexer optimal lösen! Schwieriger ist nur, wenn man den Background nicht hat, darauf zu kommen wie man ihn füttern muss.

Gruß
Matthias
Gruß
Matthias

TWS 2500 ID:110 + PBM, VPN offen, Reboot nach Rücksprache

S. Kolbinger
Elaborated Networks
Reactions:
Beiträge: 588
Registriert: Mi Aug 15, 2018 11:34 am
Hat sich bedankt: 82 Mal
Danksagung erhalten: 559 Mal

#9

Beitrag von S. Kolbinger »

Hallo Matthias,
Matze76 hat geschrieben: Mo Sep 02, 2019 9:15 am Das kann man jetzt mit dem Multiplexer optimal lösen! Schwieriger ist nur, wenn man den Background nicht hat, darauf zu kommen wie man ihn füttern muss.
ein kleiner Tipp am Rande.

Mir hilft in solchen Fällen eine komplett ausgefüllte Liste, den Überblick zu bewahren.
Logik 4Logik 3Logik 2Logik 1Status
FalseFalseFalseFalse2
FalseFalseFalseTrue1
FalseFalseTrueFalse2
FalseFalseTrueTrue0
FalseTrueFalseFalse2
FalseTrueFalseTrue1
FalseTrueTrueFalse2
FalseTrueTrueTrue3
TrueFalseFalseFalse4
TrueFalseFalseTrue1
TrueFalseTrueFalse4
TrueFalseTrueTrue0
TrueTrueFalseFalse4
TrueTrueFalseTrue1
TrueTrueTrueFalse4
TrueTrueTrueTrue3
Gruß,
Stefan K.

Robosoc
Reactions:
Beiträge: 1876
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 637 Mal
Danksagung erhalten: 775 Mal

#10

Beitrag von Robosoc »

Matze76 hat geschrieben: Mo Sep 02, 2019 9:15 am Ich habe es damit aber nie geschafft, alle Zustände in allen Situationen richtig zu setzen. Z. B. wurde nach Abwesenheit bei Anhängen der Schlüssel einfach auf Anwesenheit geschaltet, ohne die anderen Zustände zu berücksichtigen.
Jo, genau das ist der Horror, wenn man Bedingungen von Bedingungen abhängig machen will, die aber von Bedingungen abhängig sind, hinter denen eine Bedingungen liegt...ich kürz das mal ab :naughty:

Keep it simple, sonst macht man Fehler und kann es vor allem nie im Leben wieder ohne Aufwand nachvollziehen. Deshalb wäre ich in diesem Fall auch gegen eine Custom-Logik (in anderen Fällen aber nicht, also das soll absolut kein Angriff auf die customs sein :bow-yellow: ). Um Sie zu ergänzen oder in zwei Jahren wieder zu verstehen, musst du Dich in den Code eindenken (genauso wie in den Horror einer mehrdimmensionalen IF-THEN-ELSE Logik) und Schritt für Schritt durcharbeiten.

Beim Multiplexer (ich habe einen mit 13 Eingängen nur für die Steuerung einer Dunkelklappe über dem Aufzugsschacht) muss man den Aufbau einer Binärzahl verstanden haben (für die meisten noch easy oder eh bekannt) und die Auswertungen sind dann keine ekligen, unendlichen IF-THEN-ELSE Blöcke mehr, sondern nur IF-THEN Blöcke. Das checkt man auch nach 3 Jahren noch sehr schnell. Genau so ist es mir bei meinem 13er MUX ergangen. Das Ding ist nicht unkomplex, aber per Multiplexer (habe mir quasi im Wiregate Logikeditor manuell aufgebaut) hat es so vereinfacht, dass ich es heute noch in Sekunden schnalle und ergänze und im TWS wieder verwende, aber mit dem Standardmodul.

Die einzige Herausforderung: Beim Multiplexer muss man sich "nur" ganz in Ruhe überlegen welche Reihenfolge sinnvoll ist. Das ist das A und O. Bei Dir war die Bewohner-Anwesenheit die, die am meisten Änderung gebracht hat, deshalb bekommt sie die höchst Priorität. Die Regel kann man nicht immer anwenden, aber hilft meistens.

Ich würde Dir in diesem Fall wirklich raten, es mit einem Multiplexer zu lösen, weil Du ansonsten eine Custom-Logik verwendest die Du jetzt nicht noch nicht verstanden hast, Dich zum Verstehen erst einmal ordentlich reindenken musst und Dich in zwei Jahren vermutlich nicht mehr daran erinnerstund das Ganze geht von vorne los. Den Multiplexer hast Du vermutlich dagegen schon verstanden.

Und die Anwendung ist so einfach und klein, dass Sie keiner Custom-Logik bedarf.
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK
Antworten

Zurück zu „Logikengine & Logik-Editor“