Ankündigung

Einklappen
Keine Ankündigung bisher.

Logikentwurf zur Statusübersicht

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • gaert
    antwortet
    Der Trigger macht in manchen Situationen schon Sinn (also der Eingang "Trigger"): Sonst würde bei jeder Änderung an einem der String-Eingänge ein neuer String berechnet - und das kann manchmal doof sein, z.B. wenn man einen "Gesamtstring" archivieren möchte und die Telegramme nach und nach eintrudeln. Daher habe ich in meinem LBS zwei Modi zur Wahl gestellt: Bei jeder Änderung berechnen oder erst beim einem Trigger berechnen:

    PHP-Code:
    ###[DEF]###
    [name        =Strings verbinden 10-fach        ]

    [e#1        =String 1     ]
    [e#2        =String 2     ]
    [e#3        =String 3     ]
    [e#4        =String 4     ]
    [e#5        =String 5     ]
    [e#6        =String 6     ]
    [e#7        =String 7     ]
    [e#8        =String 8     ]
    [e#9        =String 9     ]
    [e#10        =String 10     ]
    [e#11        =Trigger ≠0 #init=0            ]
    [e#12        =Modus 0/1 #init=0                ]

    [a#1        =String        ]
    [a#2        =Trigger    ]
    ###[/DEF]###


    ###[HELP]###
    Dieser Baustein fügt die Eingangswerte zu einem String zusammen.

    Die Verknüpfung zu einem String wird entweder bei jedem neuen Telegramm ≠[leer] an einem Eingang E1..10 berechnet (Modus E12=0), oder die Verknüpfung erfolgt erst bei einem Telegramm ≠0 an E11 (Modus E12=1).

    E1..E10: Wert ≠[leer]
    E11: Trigger ≠0
    E12: Modus: 0=bei jedem Telegramm an E1..10 einen String an A1 ausgeben, 1=String erst an A1 ausgeben wenn an E11 ein Telegramm ≠0 anliegt
    A1: Ergebnis als String
    A2: Trigger: wird auf 1 gesetzt sobald A1 auf einen neuen String gesetzt wurde (z.B. zur Kaskadierung)
    ###[/HELP]###


    ###[LBS]###
    <?
    function LB_LBSID($id) {
        if ($E=getLogicEingangDataAll($id)) {
        
            $trigger=false;
            if ($E[12]['value']==0) {
                for ($t=1;$t<=10;$t++) {
                    if (!isEmpty($E[$t]['value']) && $E[$t]['refresh']==1) {
                        $trigger=true;
                        break;
                    }
                }
            } else if ($E[11]['value']!=0 && $E[11]['refresh']==1) {
                $trigger=true;
            }
            
            if ($trigger) {
                $n='';
                for ($t=1;$t<=10;$t++) {
                    $n.=$E[$t]['value'];
                }
                setLogicLinkAusgang($id,1,$n);
                setLogicLinkAusgang($id,2,1);
            }
            
        }
    }
    ?>
    ###[/LBS]###


    ###[EXEC]###
    <?

    ?>
    ###[/EXEC]###

    Einen Kommentar schreiben:


  • wintermute
    antwortet
    Ich hatte den Trigger auch eigentlich nur zum "Durchreichen" dabei - um Bausteine zu Kaskadieren wenn die Eingaenge nicht reichen sollten...

    Einen Kommentar schreiben:


  • gaert
    antwortet
    Ah... Na wunderbar - besten Dank

    Ich habe auch gerade einen LBS gebastelt - allerdings ohne Trigger (den wollte ich optional anbieten). Ich werde dann eine Kombination aus Deinem und meinem LBS demnächst als System-LBS einfügen (18000001).

    Einen Kommentar schreiben:


  • wintermute
    antwortet
    Zitat von gaert Beitrag anzeigen
    nur gibt's aktuell noch keinen LBS, der Strings zusammenführt (könnte ich ja glatt mal erstellen...)
    wohl: https://service.knx-user-forum.de/?c...ad&id=19000154

    Einen Kommentar schreiben:


  • gaert
    antwortet
    Aktuell gibt es nur eingeschränkte Möglichkeiten:
    - Meldungsarchiv: immer wenn ein Status geändert wird das Archiv komplett leeren, dann nacheinander die Stati eintragen
    - oder entsprechende Visuelemente erstellen und diese ein-/ausblenden (bzw. verschieben - dann wird's kompliziert...)
    - denkbar wäre auch eine Logik, die ein KO mit Text füllt: "Lampe1<br>Lampe2<br>..." - nur gibt's aktuell noch keinen LBS, der Strings zusammenführt (könnte ich ja glatt mal erstellen...)

    Einen Kommentar schreiben:


  • MIT
    antwortet
    Okay... Danke! Eigentlich ja recht trivial ... :-) .... allerdings: Hast Du auch eine Idee wie man nur die Fenster (bspw.) - dynamisch - anzeigt, die es betrifft?

    Einen Kommentar schreiben:


  • MrMirror
    antwortet
    Wie wäre es mit Status KOs addieren?

    So mache ich das bei der Anzahl meiner offenen Fenster...!

    Einen Kommentar schreiben:


  • MIT
    hat ein Thema erstellt Logikentwurf zur Statusübersicht.

    Logikentwurf zur Statusübersicht

    Ich bin nun bereits eine Weile am grübeln; finde allerdings keine brauchbare Lösung für eine Problematik bzgl. einer Statusübersicht mit Interaktion:

    Kurzum: Ich möchte in meiner Visu gerne eine Seite integrieren, die mir ffg. Funktionen / Übersichten erlaubt:
    - Anzahl der (bspw. auf einer Ebene oder komplett im Haus) aktiven Leuchten (also: Wie viele Lampen sind aktuell an?)
    - Auflistung der Leuchten, die den Status AN haben (also: Welche Lampen sind an?) Diese Auflistung sollte NUR DIESE zeigen.
    - Möglichkeit diese zentral auszuschalten (Alles-AUS) oder Möglichkeit der einzelnen Schaltung der jeweiligen Lampe (somit eine dynamische Darstellung der KOs, die den Wert 1 im Status haben in der Visu; d.h. ich möchte nicht alle Lampen darstellen, die ich im Haus habe und diese über eine Statusanzeige abbilden (das wäre ja kein Problem), sondern ich möchte das gerne dynamisch machen => geht das mit "Bordmitteln" oder wäre das eine Aufgabe für einen LBS?

    Mir ist nun nicht klar, wie ich diese Liste im Logikeditor hinbekomme. Einen WENN-DANN-LBS gibt es (noch) nicht, oder?
    Habe ich die Möglichkeit die Anzahl der Lampen (und welche Lampe den Status 1 hat) in ein Datenarchiv zu schreiben und dieses zu filtern? So nach dem Motto: WENN Status == 1 DANN schreibe KO in eine Liste (Array? / temporäres Datenarchiv?) - Anschließend dann in der Visu die Darstellung dieser Liste; im Optimalfall dynamisch; wie oben geschildert.

    War das verständlich? Gibt es Fragen zu meiner Idee? - DANKE !

    EDIT: Ach ja: und ganz analog könnte man so etwas natürlich auch für die Fenster verwenden, die gerade offen stehen ... die gehen nur leider i.d.R. nicht auf Knopfdruck zu ... ;-)
    Zuletzt geändert von MIT; 06.04.2016, 14:28.
Lädt...
X