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

    hyman Besteht mit dem LBS "Formelberechnung" die Möglichkeit, einen String (der aus Einzelbits zusammengesetzt ist) in eine Zahl zu konvertieren? Habe in der Microsoft Referenz geschaut aber nicht wirklich etwas gefunden (nur in der .NET 5 Doku).

    Würde gerne einen Wert bestehende aus 6 Bits in die korrespondierende Zahl umrechnen. Also zum Beispiel aus "001110" die 14 machen. Gibt es da einen Weg oder muss ich es über eine Logik (If then else) lösen?

    Kommentar


      Convert.ToInt32({text:S}, 2) tut es (zumindest in der Simulation).
      Zuletzt geändert von hyman; 28.08.2021, 08:38. Grund: In der GPA-Simulation getestet und vereinfacht

      Kommentar


        Hallo Leute,

        bin recht Neu in der KNX-Logik-Welt und arbeite mich gerade ein.
        Vorweg: Ja, ich habe die Suchfunktion verwendet, ja ich habe mir die Anleitung durchgelesen (wenn auch nicht alles verstanden).

        Ich möchte zunächst mit sehr einfachen Dingen starten. In diesem Fall eine einfach wenn-dann Abfrage.
        Also: Wenn "Fensterkontakt 1" oder "Fensterkontakt 2" offen, dann <Wahr> sonst <Falsch>.

        If x = true or y = true then true else false

        Mit der "normalen" Oder-Logik bekomme ich immer dann ein <Wahr>, wenn die Zustände "Fensterkontakt 1" und "Fensterkontakt 2" gleich sind (also beide <Wahr> bzw. beide <Falsch>). Gleiches passiert auch mit der Und-Logik

        (Bild 1 und Bild 2)

        Ich habe nun verschiedene Formeln ausprobiert, da ich leider keine "Formelsammlung" gefunden habe.
        u.A.:
        - ({a:b} == 1 & {b:b} == 1) ? 0 : 1

        - ({a:b} == true & {b:b} == true) ? false : true
        In beiden Fällen wurde die Meldung, dass == kein zulässiger Operant bei bool und init ist.

        Also habe ich folgende Konstellation versucht (siehe auch Bild 3):

        Formel 1: {a:b} == true
        Formel 2: {b:b} == true
        Formel 3: _previousOut1_ & _previousOut2_ ? false : true

        Leider ist das auch noch nicht das Ergebnis.
        Kleiner Hinweis: Wenn der Binäreingang geschlossen ist, wird eine 1 (true) ausgegeben.

        Ich hoffe a) ich bin im richtigen post und b) jemand kann mir helfen. Wenn es eine "Formelsammlung" geben sollte, wo finde ich diese?

        Vielen Dank schon mal

        Michael
        You do not have permission to view this gallery.
        This gallery has 3 photos.

        Kommentar


          Erst einmal willkommen.
          Wenn ich Dich richtig verstehe, willst Du einen Alarm ausgeben, wenn eines der beiden Fenster offen ist?

          Das geht ganz einfach:
          Stelle in den Binäreingängen um, daß Fenster offen = 1 ist
          Lege die beiden Fensterkontakte auf ein Oder und gib den Ausgang des Oders weiter an den Alarm

          Oder habe ich Dich völlig falsch verstanden?

          Jens

          Kommentar



            a) Dieser Post ist genau richtig
            b) Die Formel würde ich drastisch vereinfachen:
            Code:
            {a:B} & {b:B}
            ebenso funktioniert
            Code:
            ({a:b} & {b:b} ) ? 1 : 0
            ​​​​​​​

            Kommentar


              Zitat von intelligente Haustechnik Beitrag anzeigen
              Erst einmal willkommen.
              Wenn ich Dich richtig verstehe, willst Du einen Alarm ausgeben, wenn eines der beiden Fenster offen ist?

              Das geht ganz einfach:
              Stelle in den Binäreingängen um, daß Fenster offen = 1 ist
              Lege die beiden Fensterkontakte auf ein Oder und gib den Ausgang des Oders weiter an den Alarm

              Oder habe ich Dich völlig falsch verstanden?

              Jens
              Hallo Jens,

              Danke für die Antwort.

              Es ist ein Fenster mit zwei Kontakten (Dreh-Kipp-Überwachung). Bei meinen alten Fenstern mit nur einem Binäreingang ist das einfach gewesen.
              An anderer Stelle habe ich schon den Zustand umsetzten können, "geschlossen", "gekippt" oder "geöffnet" als Text. Hier ist mir aber der Zustand egal, wichtig ist zu wissen, dass es nicht geschlossen ist.

              Ziel ist, die Info dann für weitere Operationen zu verwenden. z.B. Fenster + Regen oder Hitze oder Kälte. Bei letzterem z.B. für die Heizungssteuerung.
              Mein Fern-Ziel ist, die Formeln zu verstehen und dann ein wirklich "intelligentes" Haus aufzubauen. Kann ich zwar machen lassen, dann werde ich aber Arm und bin immer von jemanden abhängig.

              Gruß

              Michael

              Kommentar


                Zitat von knxPaul Beitrag anzeigen
                a) Dieser Post ist genau richtig
                b) Die Formel würde ich drastisch vereinfachen:
                Code:
                {a:B} & {b:B}
                ebenso funktioniert
                Code:
                ({a:b} & {b:b} ) ? 1 : 0
                Hallo Paul,

                danke für die Formel. ich musste (siehe oben) wegen Geschlossen = 1 die Formel nur umdrehen, also so:

                Code:
                ({a:b} & {b:b} ) ? 0 : 1
                Der erste Schritt ist getan. Danke!

                Gruß

                ​​​​​​​Michael

                Kommentar


                  Zitat von MrSetup Beitrag anzeigen
                  ich musste (siehe oben) wegen Geschlossen = 1 die Formel nur umdrehen
                  Dann am Einfachsten (wenn der Ausgang den Typ BOOL hat): !{a:B} || !{b:B}

                  Generell dienen Vergleichsoperatoren wie == dazu, aus dem Vergleich von Zahlenwerten Wahrheitswerte (bool) zu gewinnen. Hat man schon bool, vergleicht man die nicht mit irgendwas, sondern verwendet sie direkt.

                  Kommentar


                    Zitat von hyman Beitrag anzeigen
                    Dann am Einfachsten (wenn der Ausgang den Typ BOOL hat): !{a:B} || !{b:B}

                    Generell dienen Vergleichsoperatoren wie == dazu, aus dem Vergleich von Zahlenwerten Wahrheitswerte (bool) zu gewinnen. Hat man schon bool, vergleicht man die nicht mit irgendwas, sondern verwendet sie direkt.
                    Hallo hyman,

                    Danke für die Antwort. Jetzt kommt aber genau wieder das zu Tragen, was ich oben geschrieben habe. Ich such eine "Formelsammlung" (ist aber wohl eher einen eigenen Post wert). Was macht das ! und was machen die beiden || ? Die Microsoft API Dokumentation hat bei mir mehr Verwirrung als Hilfe gebracht.
                    Hilfreich wäre evtl. auch, wenn ich wüsste, welche "Programmiersprache" dahinter steckt. Dann finde ich vll. ja was passendes.

                    EDIT:
                    Ich habe gerade noch einmal in der Hilfe nachgelesen. O.K. die beiden habe ich im Abschnitt "Operatoren" gefunden.
                    Habe ich somit meine Antwort, dass wenn ich mich mit C# auseinandersetzte muss um die Formeln richtig anwenden zu können?

                    Zuletzt geändert von MrSetup; 16.09.2021, 05:43.

                    Kommentar


                      Zitat von MrSetup Beitrag anzeigen
                      Ich such eine "Formelsammlung" (ist aber wohl eher einen eigenen Post wert). Was macht das ! und was machen die
                      beiden || ? Die Microsoft API Dokumentation hat bei mir mehr Verwirrung als Hilfe gebracht.
                      Der Abschnitt "Operatoren" in der Hilfe zum Baustein sollte alles enthalten was Du brauchst ...

                      Zitat von MrSetup Beitrag anzeigen
                      Hilfreich wäre evtl. auch, wenn ich wüsste, welche "Programmiersprache" dahinter steckt. Dann finde ich vll. ja was passendes.
                      ... und weist auch gleich im ersten Satz darauf hin, dass die zugrunde liegende Programmiersprache, in der die Formeln als gültige Ausdrücke formuliert werden müssen, C# ist.

                      Generell habe ich mich bemüht, in der Hilfe alles Wichtige auch für Nichtprogrammierer verständlich zu erklären. Die Links zur Microsoft-Dokumentation sollten nur in seltenen Fällen überhaupt nötig sein. Klar ist das für Leute ohne Programmiererfahrung starker Tobak. Das kann ich Euch bei einem derart universell einsetzbaren Baustein leider nicht ersparen. Natürlich heißt das nicht, dass ich an der Dokumentation nix mehr verbessern könnte. Wenn Du mir sagst, warum es für Dich schwierig war, die für Dich relevante Info zu finden, dann kann ich das in einer zukünftigen Version verbessern.

                      Zwei Sachen fallen mir da direkt ein:
                      1. Da der Hilfetext doch länger geworden ist als bei den allen anderen Bausteinen, könnte ich ein Inhaltverzeichnis einbauen, das direkt zu den einzelnen Kapiteln verlinkt
                      2. In der Tabelle der Operatoren könnte ich eine weitere Spalte hinzufügen, die zu jedem ein kleines Beispiel enthält.
                      Hätte Dir eins davon (oder beide) geholfen? Oder waren manche Textpassagen für Dich schwer zu verstehen? Dann sollte ich wissen, welche das waren...

                      Grüße von Horst

                      Kommentar


                        Hallo Horst,

                        erst einmal Danke für die Antwort. Wie ich in meinem Edit geschrieben habe, bin ich dann auch auf den Abschnitt gestoßen.
                        Dadurch bin ich dann auf dieser von dir verlinkten Seite https://docs.microsoft.com/de-de/dot...nce/operators/ gelandet, welche mir gerade sehr weiterhilft.
                        Mir als blutigen Anfänger hätte geholfen, wenn einfach KNX-Themen, wie z.B. oben, als Beispiel aufgeführt wären, also deinen Punkt 2.
                        Vielleicht hilft doch auch ein eigener Post Anfänger, wo einfache Themen mit Beispiel zusammengetragen werden. Mir hilft das immer, copy/past --> adapt --> try and error.

                        Und Überhaupt Danke für das Entwickeln und Bereitstellen von dem / den Baustein:en.
                        Die Anleitung an sich ist super geschrieben. Ist halt ein Spagat zwischen "für Anfänger" und "Profis". Ein Hinweis im Kapitel "Beschreibung", dass rudimentäre Programmierkenntnisse, insbesondere der Programmiersprache C# hilfreich bzw. notwendig sind, wäre glaube ich nicht schlecht.

                        Gruß

                        Michael

                        Kommentar


                          Es gibt mal wieder neue Versionen meiner Bausteinpakete.

                          Die GenericNodes stehen jetzt in der Version 1.3.10, die VisuWebNodes in der Version 1.3.16 im Downloadbereich und auf Github zur Verfügung.

                          Geändert hat sich Folgendes:

                          Verbesserungen an der Formelberechnung:
                          • Erlaubt jetzt auch solche Platzhalter-Namen, die bisher zu Fehlern geführt haben (C#-Schlüsselwörter, Klassennamen in benutzten Namensräumen)
                          • Platzhalter, die in Kommentaren oder String-Literalen enthalten sind, werden nicht mehr als Platzhalter behandelt.
                          • Manche Formeln, die früher zu unverständlichen Fehlern geführt haben, funktionieren jetzt.
                          Verbesserung am Textformatierer:
                          • Änderungen an den Dezimal- und Gruppentrennzeichen werden jetzt sofort übernommen
                          Verbesserung am XmlJsonParser:
                          • Die Auswahl "Alle Treffer als summierte Zahl" gibt jetzt Null (statt früher NaN) aus, wenn keine passenden Einträge gefunden werden.
                          Dokumentation:
                          • Die Hilfeseite der Formelberechnnung weist jetzt auf die Möglichkeit hin, temporäre Objekte anzulegen und gibt ein Beispiel, in dem dies verwendet wird.
                          • Die Hilfeseite der Formelberechnung hat wegen des großen Umfangs jetzt ein Inhaltsverzeichnis
                          • Fehlerbehebungen und kleine Ergänzungen
                          • Veraltete HTML-Tags und -konstrukte korrigiert
                          Interna:
                          • Verbesserung der Testabdeckung
                          • Die überlange Methode PlaceholderNodeBase::validateInternal wurde in mehrere Methoden aufgeteilt und die Parameter-Reihenfolgen einiger Methoden konsistenter gemacht.
                          Feedback wie immer in diesem Thread...

                          Kommentar


                            Wahnsinnige praktisch diese Bausteine!

                            Ein kleiner Verbesserungsvorschlag für den JSON parser:
                            Das neben der Summe auch der Maximalwert Null ausgibt, wenn keine passenden Einträge gefunden werden.

                            Kommentar


                              Zitat von fgoettel Beitrag anzeigen
                              Das neben der Summe auch der Maximalwert Null ausgibt, wenn keine passenden Einträge gefunden werden.
                              Das hatte ich mir überlegt und verworfen. Dann wäre ein echter Maximalwert Null nicht mehr unterscheidbar von "nix gefunden". Der Wert müsste als Parameter einstellbar sein, und dann artet das in Aufwand aus...

                              Kommentar


                                Zitat von Parsley Beitrag anzeigen
                                Gibt es schon eine Art "best practise", wie man im X1 eine State Machine bauen kann? Meine erste entsteht gerade auf der Basis eines Formelberechnung-Bausteins: Ich habe aktuell 4 States. Jeder State hat eine eigene Formel, welche die Bedingungen zum Wechsel in einen andere States enthält. Alle 4 Formel-Ausgänge schreiben ein den selben Ausgang-Baustein, wobei die Formel des aktuellen States einen Wert ungleich NULL einträgt. (Habe ich das verständlich beschrieben?)
                                Ich bräuchte mal einen Denkanstoß, wie Du Deine Statemachine implementiert hast. Hintergrund, ich möchte einen Präsenzmelder (auch mit 4 States) nachbilden.
                                Ein Screenshot Deiner Formel würde mir wahrscheinlich schon genügen. Vielen Dank!

                                hyman Und auch von meiner Seite herzlichen Dank an Horst für diese mächtigen und sehr hilfreichen Bausteine!
                                Zuletzt geändert von willisurf; 19.10.2021, 05:05.
                                Gruß Bernhard

                                Kommentar

                                Lädt...
                                X