Ankündigung

Einklappen
Keine Ankündigung bisher.

Neue Logikbausteine für den L1/X1: Formelberechnung, Statistik und mehr...

Einklappen
Dieser Beitrag wurde beantwortet.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    X1 Neue Logikbausteine für den L1/X1: Formelberechnung, Statistik und mehr...

    Hallo allerseits,

    Meine beiden Pakete von Logikbausteinen für den Gira L1 und X1 sind wie folgt verfügbar:
    Installation der Endanwenderpakete
    1. Das jeweilige Bausteinpaket (ID 20000010 oder 20000011; Download-Links unten) herunterladen.
    2. Das erhaltene Zip-Archiv auspacken: Man erhält 3 HTML-Dateien und ein weiteres Zip-Archiv. Dieses bitte nicht weiter auspacken, sondern...
    3. ... im GPA mit der Schaltfläche Logikbausteine hinzufügen (im Logik-Editor) importieren.
    4. Danach stehen die Bausteine – alphabetisch zwischen die von Gira gemischt – in der Logikbaustein-Bibliothek zur Verfügung
    5. Wie die Bausteine von Gira kommen auch diese mit ausführlicher Dokumentation hinter den Info-Knöpfen und -Links. Diese bitte nutzen bevor ihr hier Fragen stellt...
    6. Ich gehe davon aus, dass niemand mehr eine Betaversion installiert hat. Falls doch, bitte die Update-Anleitung beachten, die im Paket enthalten ist

    Generische Logikbausteine

    Download

    Die Logikbausteine in diesem Paket stellen zum einen ein paar Verbesserungen und Ergänzungen vorhandener Bausteine dar:
    • Der Baustein Send-By-Difference funktioniert ähnlich wie Gira's "Send-By-Change", erlaubt aber die Filterung ähnlicher (nicht nur genau gleicher) Werte.
    • Der Baustein Eingangswahlschalter+ funktioniert wie Gira's "Eingangswahlschalter". Zusätzlich kann beim Auswählen eines Eingangs der zuletzt auf diesem Eingang empfangene Wert gesendet werden. In manchen Fällen erspart das zusätzliche Logik mit Wertgeneratoren.
    • Der Baustein Ausgangswahlschalter+ ist die logische Umkehrung des Eingangswahlschalter+. Wie dieser kann er beim Auswählen eines Ausgangs sofort einen wählbaren Eingangswert senden. Zusätzlich kann er beim Abwählen eines Ausgangs einen Ruhewert senden. Er kann auch – mit nur einem Ausgang – als erweiterte Sperre eingesetzt werden, wenn beim Sperren ein Ruhewert und/oder beim Aufheben der Sperre der Eingangswert gesendet werden soll.
    • Der Baustein Statistikfunktionen ermöglicht nebenbei auch die Addition vieler Werte, während der Gira-Baustein "Grundrechenart" nur zwei Werte erlaubt.
    Der zweite Schwerpunkt sind statistische Berechnungen, u. a. Durchschnitt, Minimum und Maximum:
    • Die Statistikfunktionen errechnen diese für mehrere Eingänge, die in der Regel mit verschiedenen Datenpunkten verbunden sind.
    • Statistik für Zeitreihen arbeitet mit einer Zeitreihe von Werten eines Datenpunkts, die nacheinander auf dem gleichen Eingang eintreffen.
    Anders als üblich berechnen dabei alle Bausteine mit mehreren gleichartigen Eingängen ihre Ausgangswerte schon dann, wenn ein Eingang einen Wert erhält (und nicht erst dann, wenn alle Werte gültig sind). Dadurch ist eine Vorbelegung der Eingänge – die in vielen Fällen ohnehin nicht die gewünschte Wirkung hätte – meist verzichtbar.

    Eigentlich würde auch der Logikbaustein Formelberechnung thematisch gut in dieses Paket passen. Aus technischen Gründen – er verwendet die gleiche Platzhalter-Implementierung wie der "Textformatierer" – findet er sich jedoch in meinem zweiten Paket ...


    Visu- & Web-Logikbausteine

    Download

    Die Logikbausteine in diesem Paket unterstützen Berechnungen und einfache Visualisierungen mit den Bordmitteln des Gira X1:
    • Der Baustein Formelberechnung bietet folgende Funktionalität:
      • Errechnet Werte aus Funktionen, die von einem oder mehreren Dateneingängen abhängen können.
      • Alle gängigen Operatoren (einschließlich bedingter Berechnungen) sowie umfassende Funktionen für mathematische Berechnungen stehen zur Verfügung,
      • Dazu kommen eigene Funktionserweiterungen für mathematische Berechnungen, Licht- und Klimasteuerung, Textbearbeitung und Verarbeitung von Datenfeldern​.
      • Durch interne Zwischenspeicherung von Rechenergebnissen können u. a. Zustandsautomaten relisiert werden.
    Obwohl dieser Baustein thematisch besser ins Paket "Generische Logikbausteine" passen würde, muss er aus technischen Gründen – er nutzt dieselbe Platzhalter-Implementierung – in diesem Paket ausgeliefert werden.
    • Der Baustein Textformatierer setzt aus aus Formatvorlagen und Dateneingängen einen oder mehrere Ausgabetexte zusammen. Näheres – insbesondere auch zum Update von frühereren Versionen – in diesem Thread.
    • Der Baustein XML-/JSON-Parser extrahiert aus einem XML- oder JSON-Datensatz am Eingang anhand einer oder mehrerer XPath-Abfragen entsprechende Ausgabedaten. So lassen sich Daten aus Webservices (z. B. OpenWeatherMap oder FRITZ!Box Home Automation API) für die Visualisierung oder Weiterverarbeitung nutzen.

    Nutzungsbedingungen

    Die Logikbausteine beider Pakete stehen kostenlos zur Verfügung (genaue Lizenzbedingungen: Creative-Commons-Lizenz CC BY-NC-SA -- Namensnennung - Nicht-kommerziell - Weitergabe unter gleichen Bedingungen). Für zukünftige Versionen bleibt eine Änderung der Lizenzbedingungen vorbehalten.

    Die Bausteine wurden sorgfältig entwickelt und getestet. Dennoch können Fehler nicht völlig ausgeschlossen werden. Eine Anwendung in sicherheitsrelevanten Bereichen ist daher nicht erlaubt. Anwender verzichten, soweit dies gesetzlich zulässig ist, auf Ansprüche aus Sachmängel- und Produkthaftung.

    Weiter bitte ich zu beachten:
    • Gira leistet keinen Support für Drittentwickler-Bausteine.
    • Wer lieb fragt und vorher die Dokumentation gelesen hat, bekommt in diesem Thread Hilfe bei eventuellen Problemen.
    • Die Verwendung ist ab V3.1 des Gira Projekt Assistent (GPA) möglich (getestet wurde mit GPA V4.5.0)
    Ich wünsche Euch viele kreative und nützliche Logikblätter damit...

    Grüße von Horst
    Zuletzt geändert von hyman; 28.11.2023, 00:00.
  • Als Antwort markiert von hyman am 27.11.2023, 23:52.

    Ich habe soeben die Version 1.6.1 des Pakets Visu- & Web-Logikbausteine freigegeben.

    Verbesserung an der Formelberechnung:
    • Neue Methoden der Data-Klasse erlauben die Verarbeitung von indimensionalen Datenfeldern aus Zahlen oder Texten. Näheres dazu (auch Beispiele) finden sich in der Dokumentation zum Baustein (oder vorab im Post #288)
    Die neue Version steht ab sofort im Download-Bereich zur Verfügung.​
    Zuletzt geändert von hyman; 27.11.2023, 23:54.

    Kommentar


      #2
      Ich habe soeben die finale Version 1.0.0 meiner beiden Logikbaustein-Pakete freigegeben -- mit der ersten öffentlichen Version des XML-/JSON-Parsers -- siehe Eingangspost.

      Fragen und Rückmeldungen zu den Logikbausteinen und ihrere Anwendung -- nach dem Lesen der Dokumentation -- gerne in diesem Thread.

      Grüße von Horst
      Zuletzt geändert von hyman; 16.07.2019, 09:17.

      Kommentar


        #3
        Der Link für wohl eher nicht zum richtigen Ziel. Sieht nach einer Webseite eines Rechtsanwaltskanzlei aus...

        Kommentar


          #4
          Zitat von Wingman991 Beitrag anzeigen
          Der Link für wohl eher nicht zum richtigen Ziel. Sieht nach einer Webseite eines Rechtsanwaltskanzlei aus...
          Da hast du wohl die Lizenzbedingungen erwischt ... nimm die Links in den Überschriften.

          Kommentar


            #5
            Hallo,
            wie ist eigentlich die logische Vorgehensweise des Formelberechnungs-Bausteins bei mehreren Berechnungen und Variablen?
            Beispiel:
            Code:
            Formel 1: {Variable1:f} * 2
            Formel 2: {Variable2:f} + 1
            Formel 3: _out2_ * 3
            Bei einer neu eingehenden Änderung der Variable 1, wird dann nur die Formel 1 getriggert? Oder laufen die anderen auch mit durch?

            Viele Grüße
            Zuletzt geändert von Brainbug; 13.08.2019, 09:01. Grund: Zu früh abgeschickt

            Kommentar


              #6
              Laufen alle durch -- auch die, an deren Eingangsgrößen sich gar nichts geändert hat. Daher sollte man vielleicht nicht alle Formeln in einen Baustein packen, wenn die gar nichts miteinander zu tun haben. Dann besser mehrere Bausteine mit jeweils weniger Formeln nehmen...
              Zuletzt geändert von hyman; 13.08.2019, 14:39.

              Kommentar


                #7
                Alles klar! Hatte mich schon gewundert, warum Send-by-Change nicht funktioniert hat

                Kommentar


                  #8
                  Habe gestern den Textformatierer als auch den Statistik für Zeitreihen eingebaut.
                  Auf den ersten Blick sind beide Bausteine gelaufen. Nach ca. 1 Stunde liefern beide Bausteine nur noch "---" in der Visu.
                  X1 ist auf der aktuellen Firmware und auch beim GPA bin ich auf 3.4.1.

                  Hast du eine Ahnung was da passiert?
                  Gruß
                  Thorsten

                  Meine Installation: EFH mit EIB und Powernet; BJ Triton RTR 5fach; BJ Triton 3/5fach; BJ Wave Fenstermelder; Gira HS; Gira SmartSensor; Gira TK mit Fingerprint und TK-Gateway, Agfeo AS30 mit ST40IP; Dialogic Touch 15" mit Homecockpit und Schnittstelle zur Gira TK-Anlage; ipod Touch 1G und iphone 3G mit WHD iphone Docking-Station; Dreambox 7000; Kathrein UFS 910; Beleuchtung über DALI gesteuert

                  Kommentar


                    #9
                    So "trocken" nicht. Tritt das auch in der Simulation auf oder nur auf dem X1? Wenn es auf dem X1 auftritt, steht dann irgend was auffälliges in den Logfiles auf dem X1? Welche Zustände zeigt dann die Webseite der Logikengine für die Ein- und Ausgänge der beteiligten Bausteine? Lässt sich das Verhalten anhand der Eingangszustände und der Parametrierung erklären? Wenn Du damit nicht weiter kommst, dann zeig' einfach mal Dein Logikblatt und die Parametrisierung der Bausteine...

                    Kommentar


                      #10
                      Das steht im Log:
                      2019-08-13 20:47:34,716 [Fleck Receive Thread] ERROR GdsClient [(null)] - Code: 1; Text: GDS client: Received error from GDS server, code: 1; text: Set value failed.; hint: URN = urn:gds:dp:GiraX1.GIGSRVKX02:KNX-GA-Channel:Tempmax | request = '{"request":{"correlationId":1541,"command":"Set Va lue","id":"150055","value":"15.52"}}'
                      2019-08-13 20:47:34,804 [Fleck Receive Thread] ERROR GdsClient [(null)] - Code: 1; Text: GDS client: Received error from GDS server, code: 1; text: Set value failed.; hint: URN = urn:gds:dp:GiraX1.GIGSRVKX02:KNX-GA-Channel:Tempmin | request = '{"request":{"correlationId":1542,"command":"Set Va lue","id":"150168","value":"15.04"}}'
                      2019-08-13 20:57:28,665 [Fleck Receive Thread] ERROR GdsClient [(null)] - Code: 1; Text: GDS client: Received error from GDS server, code: 1; text: Set value failed.; hint: URN = urn:gds:dp:GiraX1.GIGSRVKX02:KNX-GA-Channel:Helligkeitmaximum | request = '{"request":{"correlationId":1567,"command":"Set Va lue","id":"150057","value":"27.04"}}'



                      Die Logik mit dem Statisikbaustein für Zeitreihen ist im Eingang mit einem KNX 9.004 DPT und am Ausgang nur der Maximum auch mit einem KNX 9.004 DPT verknüpft.
                      Ansonsten habe ich alle Werte unangetastet belassen.

                      Hab jetzt mal in der Simulation gespielt.
                      Da ist mir ein Fehlverhalten aufgefallen.
                      Hab mal einen Sonnenaufgang bis 50000lux hochgezählt, der Logikausgang hat das Sauber bis 50000lux ausgegeben.
                      Bei einen Sonnenuntergang zurück bis 1 lux, hat er nach einigen 1Lux am Eingang auf einmal den Max wert nach unten angepasst. Das sollte aber auf keinen Fall passieren. Ob das mit dem oberen LOG Eintrag zusammenhängt, kann ich nicht sagen. Muss ich die Werte anpassen?

                      Angehängte Dateien
                      Zuletzt geändert von jumper79; 13.08.2019, 20:28.
                      Gruß
                      Thorsten

                      Meine Installation: EFH mit EIB und Powernet; BJ Triton RTR 5fach; BJ Triton 3/5fach; BJ Wave Fenstermelder; Gira HS; Gira SmartSensor; Gira TK mit Fingerprint und TK-Gateway, Agfeo AS30 mit ST40IP; Dialogic Touch 15" mit Homecockpit und Schnittstelle zur Gira TK-Anlage; ipod Touch 1G und iphone 3G mit WHD iphone Docking-Station; Dreambox 7000; Kathrein UFS 910; Beleuchtung über DALI gesteuert

                      Kommentar


                        #11
                        Zitat von jumper79 Beitrag anzeigen
                        Bei einen Sonnenuntergang zurück bis 1 lux, hat er nach einigen 1Lux am Eingang auf einmal den Max wert nach unten angepasst.
                        Ist das genau nach einer Minute passiert? Und nach wie vielen 1lux-Telegrammen etwa?

                        Der Betrachtungszeitraum (Default 1 Minute) begrenzt, wie alt Werte sein dürfen, damit sie noch berücksichtigt werden.

                        Außerdem hast Du den Reset-Eingang mit irgendwas zeitabhängigem belegt -- leider ist nicht erkennbar, was die Vergleicher genau machen. Wenn aus dem UND-Gatter ein true kommt, vergisst de Statistik-Baustein alle davor empfangenen Werte. Dann wird das Maximum auf den zuletzt empfangenen Wert gesetzt.

                        Zitat von jumper79 Beitrag anzeigen
                        Das sollte aber auf keinen Fall passieren.
                        "Auf keinen Fall" ist mit dieser Logik und Parametrisierung eine steile These , da musst Du auf jeden Fall noch so dies und das überprüfen...

                        Zitat von jumper79 Beitrag anzeigen
                        Ob das mit dem oberen LOG Eintrag zusammenhängt, kann ich nicht sagen.
                        Ich auch nicht mit letzter Sicherheit. Ich denke aber, die kommen nicht aus meinem Baustein. Mir will eher scheinen, es gibt Gruppenadress-Datenpunkte mit den Namen "Tempmax", "Tempmin" und "Helligkeitmaximum". Auf den Gruppenadressen hört aber "draußen" auf dem Bus kein Gerät. Deshalb kommt beim Schreiben eines Werts keine Bestätigung -- "Set value failed". Könnte das hinhauen?

                        Zitat von jumper79 Beitrag anzeigen
                        Muss ich die Werte anpassen?
                        Welche Werte meinst Du?
                        Zuletzt geändert von hyman; 14.08.2019, 12:53.

                        Kommentar


                          #12
                          Hallo Hymen, mein ganz großes Kompliment für diese Logikbausteine. Vor allem die Formelberechnung ist etwas, das von vorne herein bei Gira hätte dabei sein sollen. Der GPA Logik-Editor ist gut um den funktionalen Zusammenhang darzustellen, aber alles was mathematisch zu formulieren ist, sollte als Formel eigegeben werden können, und da ist die Formelberechnung genau das, was ich gesucht habe.
                          Einen kleinen Bug gibt es allerdings: Wenn man eine Fließkomma-Variable nicht über einen Eingang liefert, sondern im GPA Editor fest vorgibt, werden die Nachkommastellen abgeschnitten. Im GPA werden Nachkommastellen mit Komma getrennt, im Logik-Baustein mit Punkt. Da fehlt irgendwo die Konvertierung.
                          Eine Variable nicht als literalen Wert in einer Formel, sondern über einene GPA Bausteinvorgabe einzustellen macht z.B. Sinn, wenn diese Variable öfters mal geändert werden muss oder wenn man deren Wert auf dem Grafik-Blatt sehen möchte.

                          Kommentar


                            #13
                            Hallo,

                            Zitat von kastoberlin Beitrag anzeigen
                            Einen kleinen Bug gibt es allerdings: Wenn man eine Fließkomma-Variable nicht über einen Eingang liefert, sondern im GPA Editor fest vorgibt, werden die Nachkommastellen abgeschnitten. Im GPA werden Nachkommastellen mit Komma getrennt, im Logik-Baustein mit Punkt.
                            Was genau meinst Du mit "im GPA-Editor" und "im Logikbaustein"? Wenn ich in einer Formel statt eines Punkts ein Komma als Dezimaltrennzeichen verwende, bekomme ich in der Regel einen Fehler. Ich bitte um ein Beispiel, damit ich das besser verstehe.

                            Zitat von kastoberlin Beitrag anzeigen
                            Da fehlt irgendwo die Konvertierung.
                            Die Formeln folgen der C#-Syntax, und die kennt nun mal keine deutsche Lokalisierung. Komma hat dort eine ganz andere Bedeutung (die wir in den Formeln so gut wie nie brauchen). Ich kann das in der Dokumentation evtl. noch klarer machen ... aber es steht auch jetzt schon drin:
                            Als Dezimaltrenzeichen für Fließkomazahlen ist immer . zu verwenden.

                            Zitat von kastoberlin Beitrag anzeigen
                            Eine Variable nicht als literalen Wert in einer Formel, sondern über einene GPA Bausteinvorgabe einzustellen macht z.B. Sinn, wenn diese Variable öfters mal geändert werden muss oder wenn man deren Wert auf dem Grafik-Blatt sehen möchte.
                            Das kann in der Tat sinnvoll sein, aber da tritt Dein Problem ja nicht auf, wenn ich es richtig verstehe.

                            Grüße von Horst
                            Zuletzt geändert von hyman; 18.08.2019, 06:33. Grund: Originalpost genauer gelesen und Antwort (mit Rückfragen) präziser formuliert

                            Kommentar


                              #14
                              Lieber Horst, dass die .NET4-Bibliotheken einen Punkt als Dezimaltrenner verwenden, ist schon klar, auch ausreichend dokumentiert und sollte m.E. auch gar nicht verändert werden, selbst wenn es ginge. Es geht mir um folgendes Beispiel, in dem der Wert 3,6 unerwarteterweise einmal als 36 und ein anderes Mal als 0 interpretiert wird, und das sollte nicht sein - oder habe ich da was Offensichtliches übersehen?
                              Gira%20X1%20Formelberechnung%20Float-Problem.png

                              Kommentar


                                #15
                                Hallo,

                                Zitat von kastoberlin Beitrag anzeigen
                                dass die .NET4-Bibliotheken einen Punkt als Dezimaltrenner verwenden, ist schon klar
                                Genau genommen ist's in diesem Fall der Mono.CSharp.Evaluator.

                                Zitat von kastoberlin Beitrag anzeigen
                                folgendes Beispiel, in dem der Wert 3,6 unerwarteterweise einmal als 36 und ein anderes Mal als 0 interpretiert wird
                                So wie es aussieht, hast Du gleich 2 Fehler gefunden:
                                • B wird nie ausgelesen, weil es nie einen neuen Wert bekommt, daher die Null. Anders gesagt: Die Initialwerte werden ignoriert. Das muss wahrscheinlich ich in meinem Baustein fixen.
                                  .
                                • Ich vermute, Dein Wertgenerator erzeugt ein Any ohne Effektiven Typ (Du kannst das sehen, wenn Du die Maus über den Ausgang schiebst, während keine Simulation läuft). Eingang A ist vom Typ Number. Die Konvertierung zwischen diesen beiden Typen ist in diesem Fall offenbar fehlerhaft. Allerdings mach' ich die gar nicht selber, sondern das Framework erledigt das. Der Bug muss also von Gira behoben werden. Man kann den gleichen Effekt auch mit Gira-Bausteinen erzeugen:
                                  AnyNumberConversionBug.PNG
                                  Interessanterweise verschwindet das Problem, wenn man dafür sorgt, dass der Ausgang den Effektiven Typ Number bekommt. Man kann dies z. B. dadurch tun, dass man die Verbindung der beiden Bausteine löscht und neu erzeugt.

                                  Allerdings ist es gar nicht so einfach, den Ausgang in den Zustand zu bekommen, dass er keinen Effektiven Typ hat, so dass der Fehler auftritt...
                                Grüße von Horst
                                Zuletzt geändert von hyman; 20.08.2019, 06:53.

                                Kommentar

                                Lädt...
                                X