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

    Den Ausgang 4 auf eine Formelberechnung mit folgenden drei Formeln:
    • int.Parse({input:S}.Split(',')[0])
    • int.Parse({input:S}.Split(',')[1])
    • int.Parse({input:S}.Split(',')[2])
    Ungetestet.
    Zuletzt geändert von hyman; 22.02.2022, 17:32.

    Kommentar


      Danke. Funktioniert!

      Kommentar


        Hallo Leute,

        ich habe mal wieder eine Frage:
        Ich versuche gerade einen Countdown / Rückwärtszähler / Eieruhr zu implementieren. Ziel ist es die noch verbleibende Zeit (z.B. bis das Dachfenster schließt) anzuzeigen. Für den HS gibt es einen LBS, welchen ich aber nicht im L1 verwenden kann.

        https://knx-user-forum.de/forum/%C3%...ountdown-12985

        Kann ich sowas mit dem LBS Formelberechnung hinbekommen?
        Oder kennt jemand eine LBS für den L1/X1 der dass schon kann?
        Oder kann jemand sowas machen? 😉

        Beste Grüße

        Michael

        Kommentar


          Ein Startpunkt könnte der LBS dimcurve sein, der als Vorwärtszähler gedacht ist. Die Umkehrung ist einfache Arithmetik = Max - vorwärtsZähler

          Kommentar


            Zitat von MrSetup Beitrag anzeigen
            Countdown
            Zitat von MrSetup Beitrag anzeigen
            Kann ich sowas mit dem LBS Formelberechnung hinbekommen?
            Ja, so gehts:

            image_122223.png

            Eine 1 auf dem Trigger-/Start-Eingang startet den Countdown. Danach sorgt der Telegrammgenerator für sekündliche Updates (indem er 0en auf denselben Eingang sendet).
            Zuletzt geändert von hyman; 04.03.2022, 08:41.

            Kommentar


              Hallo hyman

              ich meine, wir hatten über das Thema schon mal "gesprochen", aber ich finde die Postings leider nicht mehr und da es für meine aktuelle Anwendung wichtig ist, wollte ich zur Sicherheit noch mal nachfragen...

              Hat die Formelberechnung eine eingebaute "Send-by-Change" Funktion? In meiner aktuellen Logik (mit Standard-Bausteinen) hatte ich nämlich einen eigenen Send-by-Change Baustein eingebaut und ich meine mich zu erinnern, dass man den bei der Benutzun Deiner Formelberechnung nicht braucht. Erinnere ich mich da richtig?

              Danke und viele Grüße
              Martin

              Kommentar


                Nur halb: Von alleine ist Send-By-Change nicht gegeben. Du kannst es aber mit einer Formel nachbilden:

                Formel 1: Was immer Du ausrechnen möchtest
                Formel 2: (__out1__ != __previousOut1__) ? (Typ?)__out1__ : null

                wobei Typ z. B. double oder int ist, je nachdem was Du eben für einen Typ am Ausgang brauchst.

                Kommentar


                  Super, danke! Ich überlege mir das mal, ob ich dann diese 2. Formel verwende oder doch den eigenen Send-by-Change Baustein drin lasse.

                  Aber echt klasse, wie flexibel Dein Baustein ist, noch mal ein dickes Lob!

                  Gruß
                  Martin

                  Kommentar


                    Hallo Hyman,

                    ich verzweifele gerade an meinem ersten JSON Parser... ich nutze zur Elektroauto-Ladesteuerung EVCC. Die JSON Antwort ist:

                    PHP-Code:
                    {"result":{"auth":{"vehicles":{}},"batteryConfi gur ed":true,"batteryPower":-1126,"batterySoC":53,"currency":"EUR","gridConfigu red":true,"gridPower":10,"homePower":778,"loadpoi n ts":[{"activePhases":1,"chargeCurrent":0,"chargeCurr ent s":[0,0,0],"chargeDuration":0,"chargePower":0,"chargedEne rgy ":0,"charging":false,"connected":false,"connec tedD uration":9924721453,"enabled":false,"hasVehicle":f alse,"loadpoint":1,"maxCurrent":16,"minCurrent":6"minSoC":0,"mode":"minpv","phases":1,"targetSo C":1 00,"targetTime":"0001-01-01T00:00:00Z","title":"Heidelberg"}],"prioritySoC":0,"pvConfigured":true,"pvPower"189 4,"savingsSince":1650024297,"siteTitle":"Garage" ," sponsor":"xxx@xxx.com","tariffFeedIn":0.0917"tariffGrid":0.265}} 
                    Im X1 möchte ich ein paar Statusmeldungen platzieren - wie komme ich z.B. an "charging" ? Ich bilde mir ein, wenn ich einen habe, komme ich auch an die anderen (und bekomme die dann per Textformatier auch schön kombiniert) - aber ich bekomme derzeit nichtmal einen Wert geparst...

                    Danke! Spikey
                    Zuletzt geändert von Spikey; 15.04.2022, 19:30.

                    Kommentar


                      mein JSON Parser zeigt,dass da eine Menge Leerzeichen enthalten sind - hoffentlich erst beim Kopieren eingefügt.
                      ordentlich formatiert sieht das so aus, wie in meinen Bildern. Knackpunkt sind die loadpoints[1] mit einem Element 0

                      Geholfen hat dabei: https://jsonformatter.org/json-parser
                      You do not have permission to view this gallery.
                      This gallery has 2 photos.

                      Kommentar


                        Zitat von Spikey Beitrag anzeigen
                        ich verzweifele gerade an meinem ersten JSON Parser..
                        Schau auch mal hier und in der Anleitung. Entsprechend der JSON Struktur musst Du auch die Abfrage aufbauen.
                        Gruß Bernhard

                        Kommentar


                          Zitat von knxPaul Beitrag anzeigen
                          Knackpunkt sind die loadpoints[1] mit einem Element 0

                          Geholfen hat dabei: https://jsonformatter.org/json-parser
                          Und wie löse ich das sinnvoll, bzw was ist das Problem?

                          Kommentar


                            Nach Entfernen der Leerzeichen:
                            /root/result/loadpoints/item[1]/charging

                            Kommentar


                              Hab 1000 Dank!

                              Kommentar


                                Zitat von hyman Beitrag anzeigen

                                Ja, so gehts:

                                image_122223.png

                                Eine 1 auf dem Trigger-/Start-Eingang startet den Countdown. Danach sorgt der Telegrammgenerator für sekündliche Updates (indem er 0en auf denselben Eingang sendet).
                                Hallo hyman,

                                erst mal vielen Dank für die Antwort (bin tatsächlich erst jetzt dazu gekommen es mal zu probieren).
                                Sehe ich das richtig, wenn ich statt Sekunden Minuten haben möchte, dass ich die Formeln wie folgt anpassen:

                                Formel 1:
                                {Start:B} ? (double?)(DateTime.Now.Subtract(new DateTime(2022,1,1,0,0,0)).TotalMinutes + {Minutes:I}) : null

                                Formel 2:
                                Math.Round(_out1_ - (DateTime.Now.Subtract(new DateTime(2022,1,1,0,0,0)).TotalMinutes))

                                Jetzt habe ich noch eine Frage: Wie schaffe ich es, das wenn der Auslöser wieder auf "Null" gesetzt wird (also ein Abbruch) , dass bei einem Neustart der Zähler wieder von Vorne beginnt?

                                Gruß und Danke

                                Michael

                                Kommentar

                                Lädt...
                                X